繁体   English   中英

如果使用其他NSMutableArray初始化NSMutableArray,如何更新NSMutableArray

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM