代码之家  ›  专栏  ›  技术社区  ›  Ronnie Liew

侦听器/观察者通知模型更改方法的优缺点

  •  5
  • Ronnie Liew  · 技术社区  · 15 年前

    在任何典型的iPhone应用程序中,都有负责数据加载/解析的模型类。完成数据加载/解析任务后,需要通知受影响的控制器模型中的更改,并相应地更新视图。

    在iPhone应用程序开发中,有几种侦听器/观察器方法可以实现这一点。使用以下每种方法的利弊和原因是什么?

    1. KVO
    2. 非通知
    3. 代表
    4. 任何其他已知方法
    1 回复  |  直到 15 年前
        1
  •  9
  •   Adrian Kosmaczewski    15 年前

    根据我自己的经验:

    代表团:

    • pro:仅在有单个对象要通知时使用;
    • 赞成:使用一个明确的协议,你可以清楚地记录你的意图;
    • con:如果使用不当,可能会导致崩溃和内存泄漏(提示:不要保留代理,分配代理,并在释放代理时/如果释放代理,请记住取消分配代理!)

    我在我的博客中写到了由委托产生的内存管理问题:

    http://akosma.com/2009/01/28/10-iphone-memory-management-tips/

    NSNotification:

    • pro:当你有几个对象要通知时,效果会更好;
    • pro:非常灵活,导致类松散耦合;
    • con:通知是同步发送的(因此,请确保您的单个通知处理程序只执行很少的操作)
    • 反对:有时很难记录和维护。一定要在标题文档中清楚地解释每个通知的含义和发送时间。

    KVO:

    • 关于NSnotifications的类似担忧;
    • 反对者:更难以记录。一定要在评论中添加更多的标题文档或架构提示,以解释谁在听什么。我个人不会将kvo用于数据加载或解析任务。

    就个人而言,在处理与远程Web服务对话的启用网络的应用程序时,我使用了一个singleton数据加载器类(包装asihttpRequest并处理所有序列化和反序列化),它在发生某些情况时弹出通知。这样,我就可以让应用程序委托自己处理连接错误(如果需要,会弹出警报等),并且每个控制器只关心它想要的响应。

    当然,这种方法依赖于应用程序,但是这种通用的体系结构可能是您自己代码的起点。