弱势和强势属性的例子

gui*_*eak 2 reference-counting objective-c

我开始使用Objective-C开发并尝试理解弱和强引用.我想我明白了,但我不确定...

让我们考虑一下代码:

@interface SomeClass {} 
@property (nonatomic, weak) NSString* propertyName;
@end
Run Code Online (Sandbox Code Playgroud)

现在,如果我在代码中的某个地方调用这样的东西:

NSString* s = someClassInstance.propertyName;

参考计数器不会递增.我的理解是否正确?

  • 疑问1:什么是参考计数器值propertyName

  • 怀疑2:那么......你能举例说明我什么时候可以获得对这个属性的强烈引用?我希望你知道我的意思或我不明白的东西......

我会得到弱参考.

Sea*_*ell 6

宣称propertyName"弱"财产意味着两件事:

  1. 分配对象时propertyName,该对象的引用计数不会递增.

  2. propertyName指向的对象被解除分配时,propertyName将被设置为nil.

将值分配propertyName给另一个变量可能会也可能不会对引用计数产生任何影响.如果将它分配给strong属性,几乎肯定会增加引用计数(因为这是strong属性语义的一部分).但最终编译器将决定是否需要修改引用计数.

无论您是否使用ARC,了解Objective-C中对象所有权的概念都很重要,但是在任何给定时刻给定对象的实际引用计数的细节都不是那么有用.记住这一点:一个strong属性拥有一个对象.一个weak属性不会.