NSArray对象正在替换所有包含对象

  • 本文关键字:对象 包含 NSArray 替换 ios
  • 更新时间 :
  • 英文 :


我的服务的响应保存在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]都有不同的对象副本。

谢谢

最新更新