弱势和强势属性的例子

时间:2013-03-06 16:57:58

标签: objective-c reference-counting

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

考虑一下代码:

@interface SomeClass {} 
@property (nonatomic, weak) NSString* propertyName;
@end

现在,如果我在代码中的某处调用类似这样的内容:

NSString* s = someClassInstance.propertyName;

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

  • 疑问1:propertyName的参考计数器值是多少?

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

我会得到弱引用。

2 个答案:

答案 0 :(得分:6)

propertyName声明为“弱”属性意味着两件事:

  1. 将对象分配给propertyName时,该对象的引用计数不会增加。

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

  3. 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