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