MVC是我们常用的架构设计模式把类按照功能划分为Model(数据模型)、View(视图)、Controller(控制器)。旨在让Model和View不直接通信,而是通过Controller通信,从而达到解耦的目的。
这里先说明一下我们MVC的概念:
MVC绝对不是我们平时在工程中建的那几个文件夹,类似这样:
这个只是文件,如果你把MVC分别理解成类或者对象就会迷惑,比如:
MVC是为了实现View与model分离,那为什么还可以在View中声明Model来直接修改?
其实我们创建的文件夹只是为了方便我们创建的类进行分类,它与MVC架构并不一样,真正的MVC是代表的不同层级!
我们常见的分层架构,有三层架构的:展现层、业务层、数据层。也有四层架构的:展现层、业务层、网络层、本地数据层。
MVC这种层次划分,主要是针对数据流动的方向而言的。
1.MVC具体指的是什么
- Model - 数据层
- View - 展现层
- Controller - 业务层
2.MVC之间的通信
- 白色虚线:可直接引用到 controller 中实例化;
- 白色实线:不可直接引用到 controller 中实例化,需要用其他同步手段进行数据和状态的同步;
- 黄色实线:不可直接通信;
可以直接引用的好说,我们可以直接在Controller中引入并实例化Model和View,那View和Model怎么让Controller知道自己有改变?
2.1 Mode->Controller
2.1.1 KVO(监听)
Controller通过监听,监听Model的每个属性的变化来做出响应事件
2.1.2 Notification(通知)
Model中创建一个NSNotificationCenter,在Controller中,创建一个方法来接收通知。当Model发生变化时, 他会发送一个通知,而Controller会接收通知
2.2 View->Controller
2.2.1 target-Action
Controller给View添加一个target,当用户的触摸事件发生时,view产生action,Controller接收到之后做出相应的响应。
2.2.2 delegate & datasource
Controller可以作为view的代理,当View中检测到被触摸,他会通知Controller做出响应