我知道有很多关于“strong”和“weak”的写作,但所有文档都表明两者是完全同义词,可以用“strong”代替“retain”,反之亦然。
我的问题是:如果它们相同,为什么苹果要引入新的“strong”关键字?我在一个示例项目中测试了两个属性,“strong”和“retain”,它们似乎都做同样的事情。难道不应该禁止使用“retain”属性吗?还是我漏掉了什么?
我知道有很多关于“strong”和“weak”的写作,但所有文档都表明两者是完全同义词,可以用“strong”代替“retain”,反之亦然。
我的问题是:如果它们相同,为什么苹果要引入新的“strong”关键字?我在一个示例项目中测试了两个属性,“strong”和“retain”,它们似乎都做同样的事情。难道不应该禁止使用“retain”属性吗?还是我漏掉了什么?
retain
是在ARC之前的一个术语,用于控制对象在内存中的生命周期,你需要增加或减少对象的retain count
以决定它是否要一直存在于内存中。
显然,在ARC下,你不再需要关心这个问题了。我认为retain
可能仅仅为了方便那些更有经验的Objective-C程序员而被保留了下来。
ARC下最常见的关键字是:(strong, weak, nonatomic, readonly, copy)
。
strong
和retain
基本上是一样的,但因为在 ARC 中你不需要担心 保留-释放 对象,所以strong
在 ARC 中更适合作为属性的逻辑选择... 就像在 MRR 中retain
有与release
或autorelease
相反的等效项一样,在 ARC 环境中strong
没有这样的相反等效项,这就是为什么在 ARC 中使用strong
而不是retain
更加正确的逻辑;如果你能理解的话。 - holex