将NSArray实例共享给KVO对象

时间:2011-06-30 09:04:06

标签: objective-c cocoa macos

我有一个控制器类,用于存储联系人列表,我需要将此列表共享给将在此类阵列上实现KVO的对象。

最明显的解决方案是使用NSArray而不是NSMutableArray,以便每个人都可以使用控制器的相同实例变量,并且无法修改数组的内容。

现在,让我们看一下这个列表每3分钟可以更改一次,只有控制器可以更新数组的内容。

如果我dealloc并重新初始化联系人列表数组,我的所有KVO对象都将丢失对我的数组的引用。

最后: NSArray PRO:没有人可以改变阵列的内容 NSArray CON:控制器无法在没有dealloc的情况下修改数组,因此其他对象丢失了引用。

NSMutableArray PRO:Controller可以修改数组内容,所有对象都可以轻松共享相同的数组引用 NSMutableArray CON:每个人都可以修改数组。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我认为

NSArray,因为它没有经常更新。

拥有并修改数组的对象通过类型为NSArray*的属性公开它。观察者观察这个属性。只要拥有该数组的对象重新创建它,它就会将该属性设置为新的NSArray,然后在所有观察者上触发KVO。

或者,您可以为该属性实施indexed accessor patterns