MVC
大家都知道MVC是软件工程中的一种架构模式,主要是吧软件系统分为三个部分:模型Model
、视图View
以及控制器Controller,该设计模式的主要目的就是将数据和视图分离开,可以简化后续对于软件系统的修改和扩展,并且能够使得某些部分进行复用,这三部分的作用职责如下:
数据
Model: 负责封装数据、存储和处理数据运算等工作- 视图View: 负责数据展示、监听用户触摸等工作
- 控制器Controller: 负责业务逻辑、事件响应、数据加工等工作
在传统的MVC
结构中,数据层在发生改变之后会通知视图层进行对应的处理,视图层能直接访问数据层。但在iOS中,M
和V
之间禁止通信,彼此独立,必须由C
控制器层来协调M
和V
之间的变化。如下图所示,C持有M与V,它
对于M
和V
的访问是不受限的,但是M
和V
不允许直接接触控制器层,而是由多种通知、回调、事件触发等
方式来通知控制器的
在iOS的大多数应用程序的代码中MVC模式是这样组织的,view 将用户交互通知给控制器。view 的控制器通过更新 Model 来反应状态的改变。Model(通常使用 Key-Value-Observation)通知控制器来更新他们负责的 view。
由上图可以再次验证以下几点:
-
Model 和 View 永远不能相互通信,只能通过 Controller 传递。
-
Controller 可以直接与 Model 对话(读写调用 Model),Model 通过 Notification 和 KVO 机制与 Controller 间接通信。
-
Controller 可以直接与 View 对话,通过 outlet,直接操作 View,outlet 直接对应到 View 中的控件,View 通过 action 向 Controller 报告事件的发生(如用户 Touch 我了)。Controller 是 View 的直接数据源(数据很可能是 Controller 从 Model 中