1.MVC是什么?
MVC是Model-View-Controller(模型-视图-控制器)的缩写,是一种混合设计模式。用到这种设计模式时,我们所创建的对象要分为:Model 对象,View对象和Controller对象。
归类依据是:
Model对象:负责存储数据以及定义如何操作这些数据。
View对象:负责展示而且允许用户编辑来自应用程序的Model对象,View对象用来构建用户界面,与用户交互。
Controller对象:是Model对象与View对象的中间人,负责传递数据,监听各种事件,管理其他对象的生命周期等。
上图显示的是应用程序响应用户操作的一个流程。
打个比方:Controller对象好像是一家销售公司,Model对象是产品提供者,View对象是销售人员。公司卖什么,销售人员不用管,销售人员是谁,产品提供者也无需管,公司管要卖什么,管让哪个销售人员去卖。这样一来,各个部分都做自己最擅长的事情,出问题了直接找对应环节,避免了混乱。产品提供者也可以提供产品给其他公司,销售人员换个公司照样能做销售,公司也可以找其他产品提供者,聘用其他销售人员,互相都弱依赖,谁离了谁都能活(当然了,这只是一种理想状态,现实生活中有很多离开了某某某就失业就破产的人和公司)。
再看MVC设计模式,Model对象负责数据,很显然,这里的数据不仅仅可以用于某一个应用,View对象也可以直接拿到其他应用中去,Controller对象就更不用说了。实际上,苹果就是这样封装的:比如UIButton,封装了ImageView和Lable,ImageView显示什么图片,Lable显示什么文字,这些不用UIButton管,它只知道自己可以显示一张图片和一段文字以及与用户交互,其他的交给外界,你给啥图片我显示什么图片,你给啥文字我显示什么文字。这样,UIButton才可以重复使用。
综上,MVC设计模式解决了对象间耦合问题,使得程序易于复用、扩展和变更。
2.如何使用MVC?
举一个小案例:
很明显这是一个TableView,要想展示数据,其Controller对象必须成为其DataSource,遵守UITableViewDataSource协议并实现UITableViewDataSource方法,另外Controller对象还得拥有该TableView对象才能管理它。
接下来就是Model对象了:
Controller对象中预留了一个数据接口,用来从模型对象中取数据:
接下来Controller对象将数据传递给tableView:
以上便是一个应用程序利用MVC设计模式传递数据的基本流程。本程序利用的是UIKit框架自带的tableViewCell中的一种,所有需要tableView的应用都可以使用,可见其复用性之好,当然了,我们也可以根据需要自定义cell。以后想要增删显示的英雄,直接增删模型就行了,或者不想显示英雄了,换个其他的,直接在Model中修改便可。