保留和复制有什么区别?它对引用计数有何意义?
我知道当使用alloc / retain分配对象时,引用计数会增加1。 那么使用副本怎么样?
与此相关的另一个问题是,使用
之间的区别
@property(非原子,保留)和@property(非原子,复制)?
答案 0 :(得分:10)
retain - 在创建的对象上完成,它只是增加引用计数。
复制 - 创建一个新对象
答案 1 :(得分:3)
据我所知,回答你的问题。 首先,保留和复制有什么区别?它对引用计数有何意义?
retain - “指定在赋值时应该在对象上调用retain。...之前的值会发送一条释放消息。”所以你可以设想分配一个NSString实例(它是一个对象,你可能想要保留它)。因此保留计数增加1。
copy - “指定应该使用对象的副本进行分配。...先前的值会发送一条释放消息。”基本上与保留相同,但发送-copy而不是-retain。如果我没记错的话,计数也会增加1。
好的,现在进入更多细节。
属性属性是告诉编译器如何生成getter和setter的特殊关键字。在这里指定两个属性属性:nonatomic,它告诉编译器不要担心多线程,而retain,告诉编译器在设置实例变量之前保留传入的变量。
在其他情况下,您可能希望使用“assign”属性而不是retain,这不会告诉编译器!保留传入的变量。或者也许是“复制”属性属性,它在设置之前制作传入变量的副本。
我希望有所帮助。我在这里发现了另一篇可能对你有帮助的帖子。
Objective C - Assign, Copy, Retain
干杯! 何
答案 2 :(得分:2)
一般来说, copy
会创建一个与原始对象具有相同值的新对象,并将新创建对象的引用计数设置为1(顺便提一下,参考原始对象的计数不受影响。)
但是,对于不可变对象, copy
相当于 retain
,它必须将原始对象的引用计数增加1。 / p>