ARC中的Strong和Retain的区别

7

我知道有很多关于“strong”和“weak”的写作,但所有文档都表明两者是完全同义词,可以用“strong”代替“retain”,反之亦然。

我的问题是:如果它们相同,为什么苹果要引入新的“strong”关键字?我在一个示例项目中测试了两个属性,“strong”和“retain”,它们似乎都做同样的事情。难道不应该禁止使用“retain”属性吗?还是我漏掉了什么?


1
https://dev59.com/EGox5IYBdhLWcg3w3X9S - Deepak Thakur
1
strongretain 基本上是一样的,但因为在 ARC 中你不需要担心 保留-释放 对象,所以 strong 在 ARC 中更适合作为属性的逻辑选择... 就像在 MRR 中 retain 有与 releaseautorelease 相反的等效项一样,在 ARC 环境中 strong 没有这样的相反等效项,这就是为什么在 ARC 中使用 strong 而不是 retain 更加正确的逻辑;如果你能理解的话。 - holex
@Katoch,我读到过它指向相同的东西,即strong = retain,这一点我理解。但问题是为什么要在开发者的脑海中制造疑虑(尽管我总是使用strong)?因为retain与手动内存管理有关,他们应该完全停止在ARC项目中使用retain,为什么它仍然在ARC中占据一席之地? - Anshul
保留在非ARC中的是retain,在ARC中的是strong。 - Deepak Thakur
1个回答

12

retain是在ARC之前的一个术语,用于控制对象在内存中的生命周期,你需要增加或减少对象的retain count以决定它是否要一直存在于内存中。

显然,在ARC下,你不再需要关心这个问题了。我认为retain可能仅仅为了方便那些更有经验的Objective-C程序员而被保留了下来。

ARC下最常见的关键字是:(strong, weak, nonatomic, readonly, copy)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接