[英]NSArray object is replacing on all containing objects
我的服務的響應保存在NSMutableArray
並保存在一些全局類中,以供將來的viewcontrollers
。
todoDetailArray = [[tempResponse objectForKey:@"GetToDoListResult"]
objectForKey:@"EntityList"];
[[CommonClass sharedInstance] setTodoListDetailArray:[[tempResponse
objectForKey:@"GetToDoListResult"] objectForKey:@"EntityList"]];
每當從todoDetailArray
刪除對象時, [[CommonClass sharedInstance] TodoListDetailArray]
的同一對象也會被刪除。
請在這里提供幫助,為什么會出現NSArray
這種行為。
提前致謝..
如果您想要的是將項目從TodoListDetailArray
刪除時, TodoListDetailArray
將它們從todoDetailArray
刪除,則只需將數組復制到共享類中即可:
[[CommonClass sharedInstance] setTodoListDetailArray:[[[tempResponse
objectForKey:@"GetToDoListResult"] copy] objectForKey:@"EntityList"]];
這樣,兩個陣列彼此獨立。 否則,將只有一個單個數組,因此,當您使用一個引用修改它時,從另一個引用訪問它時,它看起來將被修改。
兩個數組共享一個公共參考,因此一個數組中的更改會反映另一個。 所以你可以這樣
todoDetailArray = [[tempResponse objectForKey:@"GetToDoListResult"]
objectForKey:@"EntityList"];
[[CommonClass sharedInstance] setTodoListDetailArray:[todoDetailArray mutableCopy]];
mutableCopy為可變數組。
這是因為,兩者共享對相同內存地址的共享引用。 因此,如果您希望兩者將彼此獨立,則只需對其進行深拷貝。 現在,它只是做一個淺表復制。 (深層副本將復制所引用的對象,而淺層副本僅復制對那些對象的引用。)
因此,如上所列:
todoDetailArray = [[tempResponse objectForKey:@"GetToDoListResult"] objectForKey:@"EntityList"]; [[[CommonClass sharedInstance] setTodoListDetailArray:[[[tempResponse objectForKey:@"GetToDoListResult"] objectForKey:@"EntityList"] mutableCopy]];;
現在, todoDetailArray
和[CommonClass sharedInstance]
具有不同的對象副本。
謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.