[英]How to update the NSMutableArray if its initialized with other NSMutableArray
我们的应用程序中有通讯录功能,联系人存储在NSMutableArray中。 一世
有一个单独的类,从外面访问联系人,所以我初始化了像
以下新课程......
self.newListdata = [address_book_window listData];
现在我的新班级能够使用newListdata访问所有联系人,联系人数量也是如此
匹配。 在一种情况下,如果在运行时从地址簿中删除任何联系人,则为新的
class newListdata也需要更新,但它没有像我想象的那样更新。 伯爵是
也没有更新。 我做错了什么,我是否需要手动删除联系人
newListdata也。 我指的是为什么它与地址簿联系人不同步
地址簿列表数据。我一直在学习目标C,所以如果有人可以帮助它
有用。 谢谢。
如果你有2个NSMutableArrays,它们对同一个对象有强引用,但它们是2个唯一对象(它们是2个MutableArrays),例如你创建一个NSMutableArray arrayWithArray:
就是这种情况NSMutableArray arrayWithArray:
如果你有1个数组,当你删除或添加对象时有2个引用,它就是一个单独的对象,所以你使用哪个引用访问它并不重要,它会像你提到的那样“同步”(在同步不正确,因为实际上它们是1个单个对象)
在你的情况下,listData可能会返回一个包含对同一对象的引用的新数组,在这种情况下,当你从一个数组中删除一个对象时,第二个仍将保留它(该对象将不会被解除分配),并且2个数组将与众不同。
比较newListdata和[address_book_window listData]
是否是同一个指针(同一个对象)。
printf("compare %f and %f", newlistdata, [address_book_window listData])
它们应该是相同的地址存储。
注意:由于我不知道你是如何实现你的代码的,因为listData是封装的,所以address_book_window不保证listData将始终位于同一地址存储中(如果你通过示例使用新的列表数据)。 因此newListData可能会指向一个悬空指针。
跟踪像这样的对象的最佳方法是通过观察者模式,或者如果可以,可以使用KVO。 由于他们很长时间来解释,谷歌吧;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.