【问题标题】:Downside to multiple instances of NSNotifcationCenter in cocoa touch可可触摸中多个 NSNotifcationCenter 实例的缺点
【发布时间】:2013-05-03 23:10:41
【问题描述】:

我正在研究在 cocoa touch 中实现观察者设计模式,并发现 Apple 有很酷的 NSNotificationCenter 对象,它看起来就像我正在寻找的那样。但是,我看到的大多数教程都只有一个或两个运行 NSNotificationCenter 的实例。

由于缺乏使用这种做法的教程,我想知道:在我想要观察的每个模型上都有一个 NSNotificationCenter 实例有什么缺点吗? (在我的具体情况下,大约有 16 个模型)。或者有没有办法告诉一个视图只观察一个特定的模型,使用一个 NSNotificationCenter 的全局实例?

【问题讨论】:

    标签: ios objective-c cocoa-touch observer-pattern nsnotificationcenter


    【解决方案1】:

    您可以使用 NSNotificationCenter 方法的 'object' 参数来获得此效果,而无需为每个对象分配一个。

    【讨论】:

    • 所以对于每个观察者,我必须专门检查object == self.model 或类似的东西?这是常见的做法吗?
    • 不,当您注册为观察者时,您将对象作为注册参数之一。通知中心将只发送匹配的通知。
    • 宾果游戏。没在哪里看到。谢谢。
    • 这通常比使用耦合类和使用前向声明更好吗?
    • 仅仅使用通知而不是方法调用并不能真正减少耦合,它只会让耦合看起来不那么直接。通知主要用于 1:N 通知者:观察者的情况。
    【解决方案2】:

    当您使用通知中心时,您应该使用获取默认通知中心。我觉得是这样的

    [NSNotificationCenter defaultCenter]
    

    【讨论】:

    • 我知道这一点,但我想知道是否有任何理由不能提供更多。
    • 如果你愿意,当然可以分配更多的通知中心。默认值就是:一个默认值,而不是唯一的选项。
    • 可以,但是会影响性能,所以不推荐
    • 阅读它,它声明“每个正在运行的 Cocoa 程序都有一个默认通知中心。您通常不会创建自己的。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多