2011-01-28 137 views
4

保留和複製之間的區別究竟是什麼?對參考計數有什麼意義?保留和複製之間的區別?

我知道,當一個對象被使用分配分配/保留,引用計數由一個上升。 那麼如何使用副本?

與此相關的另一個問題是,使用
@property(nonatomic,retain)和@property(nonatomic,copy)之間的區別?

+0

increate原始對象的引用計數您還沒有接受任何的答案。你應該選擇一個。 :) – Jiraheta 2013-11-07 20:15:31

回答

10

挽留 - 在創建的對象上完成的,它只是增加了引用計數。

副本 - 創建一個新的對象

+1

副本也增加再培訓計數 – rithik 2011-03-22 14:12:39

3

回答你的問題,以我的知識。首先,保留和複製之間的區別究竟是什麼?對參考計數有什麼意義?

保留 - 「指定保留應當在分配對象上調用......以前的值發送釋放消息。」所以你可以想象分配一個NSString實例(這是一個對象,你可能想保留)。所以保留計數由1

副本上升 - 「指定對象的副本應該用於分配......以前的值發送釋放消息。」基本上與保留相同,但發送 - 複製而不是 - 保留。如果我沒記錯,計數也會增加1。

好吧,現在進入更多的細節。

物業屬性是特殊的關鍵字來告訴編譯器如何生成getter和setter。在這裏指定兩個屬性:nonatomic,它告訴編譯器不要擔心多線程,並保留,這會告訴編譯器在設置實例變量之前保留傳入的變量。

在其他情況下,你可能需要使用「分配」財產屬性,而不是保留,它告訴編譯器不要!保留傳入的變量。或者也許是「複製」屬性,它在設置之前複製了傳入的變量。

我希望有幫助。我在這裏發現了另一篇文章,可能也會幫助你。

Objective C - Assign, Copy, Retain

乾杯! 聖何塞

2

一般來說,copy創建具有與原始對象相同的值的新的對象,並且將新創建的對象,以1中的參考計數(順便說,原始對象的引用計數是不受影響)。

然而,copy相當於retain不可變對象,這只是1