2011-09-20 57 views
0

我很難理解copyWithZone。NSCopying和copyWithZone: - 他們應該返回[自我保留]還是其他?

我知道它應該返回一個副本,但是如果我將一個對象添加到字典中,它會向字典中添加一個'copyWithZone'對象。如果我製作了實際的副本(即新對象),則添加到字典中的對象將不會是同一個對象。但是,如果我只增加保留計數,那麼它在技術上不是副本。

我應該保留自己還是製作實際的副本?

回答

2

copyWithZone:應該返回一個不可變的對象(如果該類有不可變和可變的版本)。如果原始文件是不可變的,只需保留返回原文將是安全的,因爲沒有任何所有者可以改變該對象。否則(即原始文件是可變的或不可變/可變的二分法不適用),返回一份副本。

至於NSDictionaryNSMutableDictionary,一般只有鑰匙被複制(如果你明確地說,與-initWithDictionary:copyItems:項目僅複製),作爲字典的內部數據結構取決於鍵值這是必要的。如果您要改變字典所使用的密鑰,它會破壞字典的數據結構,並且您將無法再檢索該密鑰的項目,或者更糟。

相關問題