我从Objective-C开发开始,并尝试理解弱和强引用。我想我明白了,但我不确定...
考虑一下代码:
@interface SomeClass {}
@property (nonatomic, weak) NSString* propertyName;
@end
现在,如果我在代码中的某处调用类似这样的内容:
NSString* s = someClassInstance.propertyName;
参考计数器不会递增。我的理解是否正确?
疑问1:propertyName
的参考计数器值是多少?
怀疑2:那么......你能举个例子说明我何时可以获得对这个属性的强烈引用?我希望你知道我的意思或我不理解的东西......
我会得到弱引用。
答案 0 :(得分:6)
将propertyName
声明为“弱”属性意味着两件事:
将对象分配给propertyName
时,该对象的引用计数不会增加。
当propertyName
指向的对象被取消分配时,propertyName
将设置为nil
。
将propertyName
的值分配给另一个变量可能会也可能不会对引用计数产生任何影响。如果将其分配给strong
属性,则几乎肯定会增加引用计数(因为这是strong
属性的语义的一部分)。但最终编译器将决定是否需要修改引用计数。
了解Objective-C中对象所有权的概念非常重要,无论您是否使用ARC,但在任何给定时刻给定对象的实际引用计数的细节都不是那么有用。请记住:strong
属性拥有一个对象。 weak
属性不会。
答案 1 :(得分:0)
首先 “strong”是“retain”的同义词,“weak”是启用ARC的应用程序中“assign”的同义词。
回答怀疑1: 它的保留计数将等于它存储的对象的保留计数。因为它只是一个参考。
回答怀疑2
回答你的怀疑:
您应该参考此链接以了解强弱类型属性
http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1