2011-09-26 39 views
1

首先,我想我理解正確的NSCopying確認...NSCopying,copyWithZone和NSDictionary的

爲了用一個簡單的NSObject的子類作爲一個NSDictionary的關鍵,我必須把它實現NSCopying協議。在複製實例的copyWithZone方法中,我必須爲我的類分配/ init一個新實例,將其屬性設置爲與複製的實例相同並返回它。

其次,爲什麼NSDictionary使用添加到它的實例副本而不是實例本身?

+0

複製詞典中的鍵。對象被保留。通常,字符串被用作鍵,並且因爲它們符合NSCopying,所以沒有問題。如果由於某種原因你想使用其他類型的對象,你必須確定它符合NSCopying。 – trudyscousin

+0

感謝您的回覆。你能解釋爲什麼要複製密鑰嗎? – Undistraction

+0

看看http://stackoverflow.com/questions/2394083/cocoas-nsdictionary-why-are-keys-copied – trudyscousin

回答

3

如果是子對象,子類不需要實現NSCopying,密鑰通常應該是NSString s,它們被複制。

+0

右鍵:只有鍵需要實現'NSCopying'。 – Wevah

+0

對不起,我不清楚。該對象將用作關鍵。我已經修改了這個問題來反映這一點。那爲什麼它需要一個對象的副本而不是對象本身呢? – Undistraction

+0

看看這個問題:http://stackoverflow.com/questions/2394083 – hypercrypt

1
  1. 您必須實現NSCopying協議的每個自定義類,如果你想使他們能夠複製
  2. ,因爲如果你將修改包含在原始字典的對象是副本將不會受到影響,必須使用複製更改