2

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

让我们考虑该代码:

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

现在,如果我在代码中的某处调用如下所示:

NSString* s = someClassInstance.propertyName;

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

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

  • 疑问 2:所以...你能举个例子说明我什么时候可以得到对这个属性的强引用吗?我希望你知道我的意思或我不明白的...

我会得到弱参考。

4

2 回答 2

6

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

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

  2. propertyName指向的对象被释放时,propertyName将被设置为nil.

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

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

于 2013-03-06T17:05:28.000 回答
0

首先,在启用 ARC 的应用程序中,“强”是“保留”的同义词,“弱”是“分配”的同义词。

对疑问 1 的回答:它的保留计数将等于它正在存储的对象的保留计数。因为它只是一个参考。

对疑问 2 的回答

回答你的疑惑:

您应该参考此链接以了解强类型和弱类型属性

http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1

于 2013-03-06T17:08:22.490 回答