我一直认为我理解MVC,但是最近,在阅读了很多关于这个主题的Stack Overflow帖子之后,我发现MVC框架做事的方式彼此略有不同。更具体地说,在视图和模型交互的方式中,似乎有两种思想流派:
当用户与视图交互时,视图会通知控制器,控制器又会对模型执行某些操作。当模型更改时,模型会通知控制器,控制器会更新视图。
视图订阅该模型。当模型发生变化时,视图似乎会直接通知它需要自行更新。
所以我的问题是:在Cocoa Touch(iOS)中,做MVC的最佳方法是什么?我这些天主要编写iOS编码,并对此平台的最佳实践感兴趣只要。 (我对ASP.NET,Rails,Backbone等的工作方式不感兴趣。)
如果可以提供一些KVO示例代码,那将是精彩。谢谢。 =)
答案 0 :(得分:5)
Apple advocates use of the first method,我相信。
它是标准MVC模型的修改版本(第二种方法),其中模型和视图完全分开。我个人认为它更清洁,更具可扩展性。
答案 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)中的代码会更清楚。