我从 Objective-C 开发开始,试图理解弱引用和强引用。我想我明白了,但我不确定……
让我们考虑一下代码:
@interface SomeClass {}
@property (nonatomic, weak) NSString* propertyName;
@end
现在,如果我在代码中的某处调用如下内容:
NSString* s = someClassInstance.propertyName;
引用计数器没有递增。我的理解正确吗?
疑点一:
propertyName
的引用计数器值是多少?疑点2:所以...你能举个例子说明我什么时候可以拿到这个属性的强引用吗?我希望你知道我的意思或我不明白的地方......
我会得到弱引用。
最佳答案
将 propertyName
声明为“弱”属性意味着两件事:
当您将对象分配给
propertyName
时,该对象的引用计数不会增加。当
<propertyName
指向的对象被释放时,propertyName
将被设置为nil
。
将 propertyName
的值赋给另一个变量可能会也可能不会对引用计数产生任何影响。如果将它分配给 strong
属性,您几乎肯定会增加引用计数(因为这是 strong
属性语义的一部分)。但最终编译器将决定是否有必要修改引用计数。
了解 Objective-C 中对象所有权的概念很重要,无论您是否使用 ARC,但在任何给定时刻对给定对象的实际引用计数的详细信息并不是那么有用。请记住:strong
属性拥有一个对象。 weak
属性不会。
关于objective-c - 弱和强属性示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15253423/