我的服务的响应保存在NSMutableArray
中,也保存在一些全局类中,以便在将来的viewcontrollers
中使用。
todoDetailArray = [[tempResponse objectForKey:@"GetToDoListResult"]
objectForKey:@"EntityList"];
[[CommonClass sharedInstance] setTodoListDetailArray:[[tempResponse
objectForKey:@"GetToDoListResult"] objectForKey:@"EntityList"]];
当一个对象从todoDetailArray
中删除时,[[CommonClass sharedInstance] TodoListDetailArray]
中的同一对象也被删除。
请帮助这里,为什么这种行为从NSArray
。
Thanks in advance.
如果您想要的是项目在从todoDetailArray
中删除时不应该从TodoListDetailArray
中删除,那么只需将数组复制到您的共享类:
[[CommonClass sharedInstance] setTodoListDetailArray:[[[tempResponse
objectForKey:@"GetToDoListResult"] copy] objectForKey:@"EntityList"]];
通过这样做,两个数组相互独立。否则,将只有一个单独的数组,所以当您使用一个引用修改它时,从另一个引用访问它时,它将显示被修改。
两个数组共享一个公共引用,因此一个数组中的更改会反映在另一个数组中。所以你可以这样做
todoDetailArray = [[tempResponse objectForKey:@"GetToDoListResult"]
objectForKey:@"EntityList"];
[[CommonClass sharedInstance] setTodoListDetailArray:[todoDetailArray mutableCopy]];
这是因为两者共享对相同内存地址的共享引用。如果你想让两者相互独立你只需要做一个深拷贝。现在它只是做了一个浅拷贝。(深度复制复制所引用的对象,而浅复制只复制对这些对象的引用。)
所以如上所述:
todoDetailArray = [[tempResponse objectForKey:@"GetToDoListResult"]
objectForKey:@"EntityList"];
[[[CommonClass sharedInstance] setTodoListDetailArray:[[[tempResponse objectForKey:@"GetToDoListResult"] objectForKey:@"EntityList"] mutableCopy]];;
现在todoDetailArray
和[CommonClass sharedInstance]
都有不同的对象副本。
谢谢