一、MVC的概念
MVC,即Model-View-Contoller(模型-视图-控制器),这种模式是将model和view分离,然后通过controller建立model和view的联系一种松耦合的开发模式。
Model(模型)
Model是数据和业务规则,它接受controller发来的处理任务更新Model,并返回处理后的数据给controller。那些返回的数据未经格式化,所以可以被多个视图使用,减少了代码的重复性。
View(视图)
View是用户界面。它接受用户的操作 并报告给controller ,然后格式化Model返回的数据并输出给用户。
Controller(控制器)
Controller是好比一个调度者,它接受用户请求(用户在View上的操作),调度Model和View去完成用户的需求。它接收用户在View上提出的请求,并根据请求调用model去处理,然后将model处理后的数据显示到View上,Controller本身不做任何的处理和输出。
二、MVC的工作原理
MVC模式将程序强制分离输入、输出、处理三部分。使用MVC模式的程序被分为三个核心部分:模型、视图、控制器,各自分工明确,降低程序的耦合度。
从下图中,我们可以看出控制器在MVC中起到非常重要的作用,它负责视图与模型相互间的交互。当视图上有了某些操作,会通过控制器反应至模型中。如果模型中的数据有所改变或者更新,则会通过控制器,对视图进行相关界面改变。视图与模型是永远都不直接进行通信的。
iOS 下的MVC模式
在iOS开发中,MVC模式中的View主要由UIView及其子类实现,Controller由使用的UIView对应的Controller实现,如UITableView对应的UITableViewController,Model则需要用户根据需求自己实现。
iOS的SDK中提供相对应的组件进行方便快捷的建立MVC模式进行程序开发,如视图组件UIView,UIViewController,对模型中可能使用到的组件进行封装,如CoreData、数据库。
下图是iOS下的MVC模式的工作原理图
上图说明以下几点:
1、Model和View永远不能相互通信,只能通过Controller传递。
2、Controller可以直接与Model对话(读写调用Model),Model则通过Notification和KVO机制与Controller间接通信。(一种盲通信)
3、Controller可以直接与View对话(通过outlet,直接操作View,outlet直接对应到View中的控件),View通过 action向Controller报告事件的发生(如用户Touch我了)。Controller是View的直接数据源(数据很可能是 Controller从Model中取得的)。Controller是View的代理(delegate),以同步View与Controller,delegate是一组协议,表示程序将要或者已经处于某种状态时,来调整View,以呈现给用户。
iOS开发中的MVC的使用步骤
在开发程序时,我们一般按照如下几个步骤来进行:
l 定义UIViewController
l 定义UIView
l 定义Model
l MVC相互间的通信
三、MVC的优缺点
MVC的优点:MVC使数据层、业务层和视图层分离,降低程序的耦合度,增加程序的扩展性和移植性,便于维护。同时一个模型能被多个视图共用,减少代码的重复性。
MVC的缺点:由于强制分离了视图和模型,在一定程度上增加程序的复杂性。
一言以蔽之,从长远看,MVC模式利大于弊。