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

时间:2012-02-10 19:23:28

标签: iphone objective-c ios model-view-controller key-value-observing

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

  1. 当用户与视图交互时,视图会通知控制器,控制器又会对模型执行某些操作。当模型更改时,模型会通知控制器,控制器会更新视图。

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

  3. enter image description here

    所以我的问题是:在Cocoa Touch(iOS)中,做MVC的最佳方法是什么?我这些天主要编写iOS编码,并对此平台的最佳实践感兴趣只要。 (我对ASP.NET,Rails,Backbone等的工作方式不感兴趣。)

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

3 个答案:

答案 0 :(得分:5)

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

它是标准MVC模型的修改版本(第二种方法),其中模型和视图完全分开。我个人认为它更清洁,更具可扩展性。

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

答案 1 :(得分:3)

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

我记得他很快就完成了材料的MVC部分,使这件事非常清楚。此外,我不得不说,#1学派是我更赞同的。

答案 2 :(得分:1)

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

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

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

表现明智我不知道是否有任何不同,但(1)中的代码会更清楚。