斯坦福大学公开课
MVC含义:
视图(View):构建UI的类;例如:按钮,标签,进度条等。
模型(Model):视图类所需要的数据;例如:表格需要显示的文字。
控制器(Controller):连接视图类和模型类,任务是使数据显示在屏幕上。例如:控制器将表格需要使用的数据“填入”表格视图中,将表格视图显示出来。
一、访问
- 控制器可以直接访问模型:将模型直接作为控制器的属性。
- 控制器可以直接访问视图:将视图直接作为控制器的属性。
- 模型与视图无法直接访问对方:二者完全解耦,不能引用对方,把对方设置为属性。
二、通信方式
视图到控制器的通信:
目标动作机制(target - action):用户与视图交互触发控制器的方法。例如:点击按钮后实现视界面跳转,网络请求,刷新UI等。
委托机制(delegate):视图向控制器询问某些自己无法决定的事情,或是让控制器帮助自己做一些自己独立无法完成的事情。 因为控制器才是掌握全局的角色,很多时候视图是无法自己做决定的。例如:表格问控制器:我可以滚动么?然后控制器给予回答告知是否可以继续滚动。 如果表格的高度很小,那么就可以不让它滚动。但是如果表格的高度已经超过了屏幕的高度,这时候如果让它自作主张无法滚动久不好了。
数据源机制(dataSource):视图让控制器给它将要显示的数据。例如:音乐的数据存在于模型里,控制器访问模型,从模型里拿到数据后告诉视图如何显示出歌曲。
模型到控制器的通信
- 通知机制(Notification):控制器注册监听某模型数据变化的广播频道,当此模型数据变化后向该控制器发送广播,告知模型变化情况。
- KVO机制(Key-Value Observing):模型作为控制器的属性,当模型属性被修改后,持有此模型属性的控制器就会收到通知。
三、通信方式图解
文/Hero_SJ(简书作者)原文链接