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

时间:2010-01-03 15:40:01

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

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

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

  1. KVO
  2. NSNotification
  3. 代表
  4. 任何其他已知方法

1 个答案:

答案 0 :(得分:9)

根据我自己的经验:

<强>团:

  • PRO:仅在您有单个对象通知时使用;
  • PRO:使用明确的协议,您可以清楚地记录您的意图;
  • CON:如果使用不当,可能是崩溃和内存泄漏的来源(提示:不要保留代理,分配代理,并记得在代理被释放时取消分配代表!)

我在博客上写了关于代理生成的内存管理问题:

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

<强> NSNotification:

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

<强> KVO:

  • 关于NSNotifications的类似问题;
  • CON:文档更加模糊。请务必在评论中添加更多标题文档或体系结构提示,以解释谁在听什么。我个人不会使用KVO来加载数据或解析任务。

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

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