2012-08-04 43 views

回答

4

問題是iOS(和OSX)使用淺拷貝。這意味着新集合與原始集合中的對象相同。正如@danDedo在他的回答中所說,你的副本是不可變的 - 它是一個字典而不是可變字典(所以你不能添加或刪除對象)。但是對象是一樣的。所以如果這些對象本身是可變的,那麼在一個地方的變化將會影響所有的引用(也就是副本中的所有對象)。

解決方案是編寫自己的「深層複製」(如果您需要的話) - 您可以在此找到搜索「深層複製」的示例。

0

您正在將消息副本發送給接收方,是不是應該發送mutableCopy來創建可變字典?我很驚訝你試圖改變這個對象時不會引發異常。

+0

mutableCopy似乎有相同的效果 – Voldemort 2012-08-04 01:27:17

+0

我刪除了我的最後一條評論,因爲它是錯誤的,但我也誤解了它。 OP不修改字典本身,但字典內的指針*的內容(例如NSMutableString) – borrrden 2012-08-04 05:11:54

2

您創建了該集合的副本,但該集合保存了指向對象的指針。所以,新副本也只保存指向對象的指針(稱爲淺拷貝)。

打印出這兩個字典,你可以看到他們都擁有相同的指針。

另外,你的「複製」不是MutableArray ...你需要使用mutableCopy。

相關問題