【问题标题】:Pros and Cons of Listener/Observer approaches to notify Model changes通知模型更改的侦听器/观察者方法的优缺点
【发布时间】:2010-01-03 15:40:01
【问题描述】:

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

在 iPhone 应用程序开发中有几种侦听器/观察器方法。使用以下每种方法的优缺点和原因是什么?

  1. KVO
  2. NSNotification
  3. 委托
  4. 任何其他已知方法

【问题讨论】:

    标签: iphone objective-c model-view-controller notifications


    【解决方案1】:

    根据我自己的经验:

    代表团:

    • 专业版:仅在您有一个要通知的对象时使用;
    • PRO:使用明确的协议,您可以清楚地记录您的意图;
    • CON:如果使用不当,可能会导致崩溃和内存泄漏(提示:不要保留委托,分配它们,并记住在/如果它们被释放时取消分配!)

    我在博客上的这篇文章中写了关于委托产生的内存管理问题:

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

    NSNotification:

    • PRO:当您需要通知多个对象时会更好;
    • PRO:非常灵活,导致类松散耦合;
    • CON:通知是同步发送的(因此请确保您的各个通知处理程序只做很少的事情)
    • CON:有时难以记录和维护。请务必在标题文档中清楚地说明每个通知的含义以及发送时间。

    KVO:

    • 关于 NSNotifications 的类似问题;
    • CON:文档更加晦涩难懂。请务必在您的 cmets 添加更多标题文档或架构提示,以解释谁在听什么。我个人不会将 KVO 用于数据加载或解析任务。

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

    当然,这种方法取决于应用程序,但这种通用架构可能是您自己的代码的起点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-21
      • 2016-04-12
      • 2012-04-19
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 2017-03-13
      • 2023-03-29
      相关资源
      最近更新 更多