iOS / Cocoa – 数据模型< – >控制器的devise模式

(我已经阅读了许多stackoverflowpost和一般的cocoaMVC,但大多数涉及视图控制器之间的信息共享。

鉴于以下情况:

  • 负责(XML或JSON派生的)数据的下载,parsing,validation和存储的DataModel类,

  • 一个ViewController类,它将实例化一个DataModel对象,并且需要随着时间的推移从DataModel获取信息(例如,更新视图以反映模型中的变化)

问:处理模型数据更改通知以及将数据提供给View Controller的最佳做法是什么?

我见过的方法包括:

  • Model类发布Notifications,在Notification的userInfo字典中提供数据。 View Controller侦听通知,查看userInfo。 例如Apple的SeismicXML示例代码。

  • Model类定义了一个Protocol,View Controller作为委托,响应模型的特定协议方法。

  • Model类保持指向View Controller的指针,直接调用View Controller中的方法或属性。 (我不得不说这是一个迷,因为它需要模型和控制器之间的紧密结合。)

我倾向于通知方式,但希望听取其他人的意见。

我会不惜一切代价将模型存储指针指向视图控制器。 这是正常责任的倒置。 在MVC中,模型应该独立于任何控制器。

委托/协议模式适用于在视图控制器的生命周期内创build和销毁的短期模型。

通知和KVO是我处理潜在模型更改的主要方式。 它允许模型生存很长时间,并且独立于在其生命周期中创build和销毁的控制器。

如果只有一个视图控制器类,并且该类实例化模型类,那么委托方法更合适。 当多个类需要获取信息时,或者当控制器在模型类的层次结构中被广泛分开时,通知可以更好地使用,从而很难获得设置委托的适当引用。

它不在你的名单上,但是Key-Value Observing可能对你正在做的事很有用。 这将允许iOS为您发送通知。

您可以在“KVO”标题下阅读更多内容