【问题标题】:Share NSArray instance to KVO objects将 NSArray 实例共享给 KVO 对象
【发布时间】:2011-06-30 18:35:14
【问题描述】:

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

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

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

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

最后: NSArray PRO:没有人可以改变数组的内容 NSArray CON:控制器不能在没有dealloc的情况下修改数组,所以其他对象失去了引用。

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

有什么建议吗?

【问题讨论】:

    标签: objective-c cocoa macos


    【解决方案1】:

    NSArray 在我看来,因为它不经常更新。

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

    或者,您可以为属性实现indexed accessor patterns。

    【讨论】:

      猜你喜欢
      • 2018-09-21
      • 2014-10-16
      • 2010-12-29
      • 2014-01-21
      • 1970-01-01
      • 2020-05-22
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多