簡體   English   中英

NSArray對象將替換所有包含的對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM