保留和复制的区别?

4

“retain”和“copy”的区别是什么?对于引用计数有何意义?

我知道使用alloc / retain分配对象时,引用计数会增加一。那么复制呢?

另一个相关问题是,“@property(nonatomic,retain)”和“@property(nonatomic,copy)”之间的区别是什么?


你还没有接受任何答案。你应该选择一个。 :) - Jiraheta
3个回答

10

retain -- 对已创建的对象进行保留操作,仅会增加引用计数。

copy -- 创建一个新对象。


2
复制也增加重新训练计数。 - rithik
2
@rithik:当创建新对象时,保留计数将为1。 - Girish Kolari
复制并不总是创建一个新对象。 - newacct

3
回答你的问题,根据我的了解,retain和copy有什么区别?它对引用计数有什么重要意义?
retain - “在分配时指定应调用retain方法”。之前的值将发送release消息。因此,你可以想象分配NSString实例(它是一个对象,你可能希望保留)。因此,保留计数会增加1。
copy - “指定应使用对象的副本进行赋值”。之前的值将发送release消息。基本上与retain相同,但发送的是-copy而不是-retain。如果我记得正确,计数也会增加1。
现在进入更详细的细节。
属性属性是特殊关键字,告诉编译器如何生成getter和setter。在这里,您指定了两个属性:非原子性,告诉编译器不要担心多线程,以及保留,告诉编译器在设置实例变量之前保留传递的变量。
在其他情况下,你可能希望使用“assign”属性属性而不是retain,这告诉编译器不要保留传递的变量。或者可能是“copy”属性属性,在设置之前复制传递的变量。
我希望这能有所帮助。我在这里找到了另一篇帖子,可能也会对你有帮助。

Objective C - 赋值、复制、保留

祝好!
Jose

2

一般来说,copy 创建一个新对象,该对象的值与原始对象相同,并将新创建对象的引用计数设置为 1(顺便提一下,原始对象的引用计数不受影响)。

然而,对于不可变对象,copy 相当于 retain,只会将原始对象的引用计数增加 1。


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