Cocoa Touch 中的 MVC:视图和模型如何交互?

Posted

技术标签:

【中文标题】Cocoa Touch 中的 MVC:视图和模型如何交互?【英文标题】:MVC in Cocoa Touch: How do the view and the model interact? 【发布时间】:2012-03-03 06:20:40 【问题描述】:

我一直以为我了解 MVC,但最近,在阅读了很多关于该主题的 Stack Overflow 帖子后,我发现 MVC 框架做事的方式彼此之间略有不同。更具体地说,在视图和模型交互的方式上,似乎有两种思想流派:

    当用户与视图交互时,视图通知控制器,控制器反过来对模型做一些事情。当模型发生变化时,模型会通知控制器,控制器进而更新视图。

    视图订阅模型。当模型发生变化时,视图似乎会被直接通知它需要自我更新。

所以我的问题是:在 Cocoa Touch (iOS) 中,执行 MVC 的最佳方式是什么?这些天我主要为 ios 编写代码,并且对这个平台的最佳实践感兴趣只要。 (我对 ASP.NET、Rails、Backbone 等如何做事不感兴趣。)

如果能提供一些KVO 示例代码,那将是精彩。谢谢。 =)

【问题讨论】:

【参考方案1】:

Apple advocates use of the first method,我相信。

它是标准MVC模型的修改版本(第二种方法),模型和视图完全分离。我个人认为它更干净,更可扩展。

    逻辑集中在控制器中。 无需编写自定义视图来处理来自模型的事件。通常你会编写一个自定义控制器,但使用 SDK 提供的视图类。按照第二种方法,您可能必须创建一个自定义视图来处理来自模型的事件。

【讨论】:

【参考方案2】:

根据我的经验,大多数情况下都应该使用 (1)。

在 (2) 中,由于视图不拥有模型,因此您始终需要将模型的更改传递到要渲染的视图,如果可以从多个模型更新视图,则需要为此编写单独的代码。

在(1)中,从控制器更新视图的方法可以被多个模型使用,控制器引用模型,因此您不需要在通知中传递任何信息。

性能方面我不知道是否有任何不同,但 (1) 中的代码会更清晰。

【讨论】:

【参考方案3】:

我发现关于这个问题的最佳基础理论是在斯坦福大学由一位名叫 Paul Haggarty 的非常有才华的老师教授的。我建议在 iTunes U 上查看这门课程 - 有 18 节高清视频和 ppt 文件可供学习。这是课程网站的链接:http://www.stanford.edu/class/cs193p/cgi-bin/drupal/

我记得他把材料的MVC部分讲得很快很彻底,把这件事讲得很清楚。另外,我不得不说,我更同意排名第一的思想流派。

【讨论】:

以上是关于Cocoa Touch 中的 MVC:视图和模型如何交互?的主要内容,如果未能解决你的问题,请参考以下文章

《从零开始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式

《从零开始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式

Cocoa / iOS / iPhone中的模型对象所有权和MVC

Cocoa Touch:图形界面构建UIKit

基于 Cocoa 文档的应用程序中的 MVC

《从零开始学Swift》学习笔记(Day 66)——Cocoa Touch设计模式及应用之通知机制