2014-07-21 50 views
0

我的服務的響應被保存在NSMutableArray中,並且還在某些全局類中用於將來使用它viewcontrollersNSArray對象正在替換所有包含對象

todoDetailArray = [[tempResponse objectForKey:@"GetToDoListResult"] 
         objectForKey:@"EntityList"]; 
[[CommonClass sharedInstance] setTodoListDetailArray:[[tempResponse 
      objectForKey:@"GetToDoListResult"] objectForKey:@"EntityList"]]; 

當過對象從todoDetailArray刪除,[[CommonClass sharedInstance] TodoListDetailArray]相同的對象也越來越被刪除。

請幫助這裏,爲什麼這個行爲從NSArray

在此先感謝..

回答

0

如果你想那是什麼項目不應該從TodoListDetailArray被刪除,當您從todoDetailArray刪除它們,那麼就陣列複製到共享類:

[[CommonClass sharedInstance] setTodoListDetailArray:[[[tempResponse 
     objectForKey:@"GetToDoListResult"] copy] objectForKey:@"EntityList"]]; 

通過這樣做,兩個數組彼此獨立。否則,只會有一個數組,因此當您使用一個引用對其進行修改時,它將在從其他引用訪問時出現修改。

0

這兩個數組共享一個公共引用,所以在一個數組中改變反映在其他數組中。所以你可以這樣做

todoDetailArray = [[tempResponse objectForKey:@"GetToDoListResult"] 
         objectForKey:@"EntityList"]; 
[[CommonClass sharedInstance] setTodoListDetailArray:[todoDetailArray mutableCopy]]; 

mutableCopy for mutable array。

0

因爲它們共享同一個內存地址的引用。所以如果你想讓兩者相互獨立,你只需要做一個深層次的複製。現在它只是做一個淺拷貝。 (深拷貝複製,而淺拷貝複製,只有那些對象的引用引用的對象。)

所以上面所列:

todoDetailArray = [[tempResponse objectForKey:@"GetToDoListResult"] objectForKey:@"EntityList"]; [[[CommonClass sharedInstance] setTodoListDetailArray:[[[tempResponse objectForKey:@"GetToDoListResult"] objectForKey:@"EntityList"] mutableCopy]];;

現在無論todoDetailArray[CommonClass sharedInstance]有對象的不同副本。

謝謝