0

我们的应用程序中有地址簿功能,联系人存储在 NSMutableArray 中。一世

有一个单独的类,它从外部访问联系人,所以我已经初始化为

在新班级下面...

self.newListdata = [address_book_window listData];

现在我的新班级能够使用 newListdata 访问所有联系人,联系人数量也

匹配。在一种情况下,如果在运行时从通讯簿中删除了任何联系人,则新建

类 newListdata 也需要更新,但它并没有像我想的那样更新。计数是

也不更新。我做错什么了吗,我需要手动删除联系人吗?

newListdata 也是。为什么它与我所指的地址簿联系人不同步

通讯录列表数据。我一直在学习目标C,所以如果有人可以提供帮助,那就是

有用。谢谢。

4

2 回答 2

1

如果您有 2 个 NSMutableArray,它们对相同的对象有强引用,但它们是 2 个唯一对象(它们是 2 个 MutableArray),例如,当您创建一个NSMutableArray arrayWithArray:

如果您有 1 个数组,并且当您删除或添加对象时有 2 个对它的引用,它是一个对象,因此您使用哪个引用来访问它并不重要,正如您提到的那样,它将处于“同步”状态(在同步不正确,因为实际上它们是 1 个单个对象)

在您的情况下, listData 可能会返回一个包含对相同对象的引用的新数组,在这种情况下,当您从一个数组中删除一个对象时,第二个数组仍将保留它(该对象将不会被释放)并且 2 个数组将与众不同。

于 2013-03-21T11:41:10.970 回答
1

比较 newListdata 和[address_book_window listData]是否是同一个指针(同一个对象)。

printf("compare %f and %f", newlistdata, [address_book_window listData])

它们应该是相同的地址存储。

注意:由于我不知道您是如何实现代码的,由于 listData 被封装,因此 address_book_window 不保证 listData 将始终位于相同的地址存储中(如果您使用新的列表数据为例)。所以 newListData 可能会指向一个悬空指针。

跟踪此类对象的最佳方法是通过观察者模式,或者如果可以的话,使用 KVO。因为他们很长解释,谷歌它;)

于 2013-03-21T11:42:16.903 回答