我的斯坦福2013最新iOS7程序开发公开课笔记
原文地址见博客园 http://www.cnblogs.com/noblog/p/stanford-ios7-developement-1.html
本质上,Model用来表示What is my application,在扑克匹配程序中,比如Cards,Deck或者怎么游戏逻辑,等等UI独立的部分都是在Model中,Controller控制如何将Model展示在View当中,View是非常generic的层,而是用C去控制V层。
三者之间的交互,C到M和V都是绿色的通道,应该做的,V跟M之间是红线,两者之间应该永不直接交流。M独立于V,而V需要C来指定如何。V要是到C的话,应该一种结构化的方式,因为毕竟图形界面得跟程序交互,收到外面的信号之后得能传回系统也就是C当中。结构化的方式是约定好的调用方式。第一种,也就是C里有一个target然后把这个target的action给V,每当V回调C的时候,就知道直接调用这个target了, blind simple structured way调用。这样的例子比如,按一个按钮,对应的一个action到C当中。第二种就是will/should/did的类型,当一个V的界面变化的时候,比如用户下拉列表,V应该问比如是否应该展示呢,这类的will/should/did应该用delegate protocol的方式交给C去做,这里涉及到delegation的模式。第三种,就是data source,V不应该拥有展示的数据,比如一个list展示一个歌曲列表,不应该在V层面的list保存1000首歌曲,而是应该交给C,来获取data,比如从100到150的歌曲名之类的,data source也是一种delegate,所以iOS中最常见的就是will/should/did类型的delegate以及一些这种data source的delegate,这就是V与C交互的方式。
M如何与C交互,比如M有时候来自网络数据,如果该数据更新了,如何通知C来更新V呢?做法就是用类似radio的方式,就是广播一个消息任何人都可以关注它,Notification & KVO (Key-Value-Observation)就是设定一个预先定好的更新,C只需要listen to那个信号,等一来更新,就收到了。
这样就覆盖了一个最基本的MVC交流形式,C到MV,MV之间不交互,M到C通过target action以及delegate,M到C是notification KVO,小的MVC可以组合成更大的MVC集合,比如有个tab bar点击进去之后,指定到另一个MVC。