MVC 设计模式的主要目的是可重用性,能够在不同的视图中使用重用同一个模型。

Model View Controller (MVC) Design Pattern

模型 Model

模型包含了数据。例如,一个 Book 对象包含有关书的信息:标题和作者。此外,Book 对象能够被其它对象关联,建立一对一或一对多的关系。例如 Category 对象可包含多个 Book 对象。模型中的数据可以来源于本地数据库或文件,也可以从网络请求回来。

模型不应该直接和视图打交道,应该在需要的时候访问通过控制器来访问。

在 iOS 中,模型通常是 NSObject 或 NSManagedObject的子类。任何模型对象包括一些实例变量和对应的 getter/setter 方法。大多数面向对象编程语言都有提供封装的机制。在 iOS 中使用 @property 封装,和可选的 @synthesize 自动生成 getter/setter 方法。以 Book 模型为例:

#import <Foundation/Foundation.h>

@interface Book : NSObject

@property (nonatomic, copy) NSString *title;    // 会自动生成 _title 实例变量
@property (nonatomic, copy) NSString *author;   // 会自动生成 _author 实例变量

@end

视图 View

视图显示模型的一些信息。例如,视图能够显示书本列表。尽管视图不会直接从模型中获取信息,而是使用控制器来协调什么时候该显示什么。

在 iOS 中,大多数视图继承自 UIView,UIView 能够捕捉触摸事件和绘图显示。UIKit 框架包括各种绘制系统标准界面元素的类,如表格,按钮,输入框,滑动条等。以下是一个书的列表:

a list of books

控制器 Controller

控制器能够访问模型的数据,然后将它们显示到视图。同一个控制器可以作为几个视图和模型之间的中间体。控制器监控着视图上的用户交互,并将产生的变化与模型通信。反过来,也可将由控制器观察到模型中的更改,呈现到视图上。

控制器是多数应用所依赖的。在 iOS 中,控制器作为 UIViewController 的子类管理着视图。它也负责 委托(delegate) 消息和 目标-动作(target-action)消息的响应。以下是 UITableViewController ( UIViewController 的子类)如何管理 UITableView 的图解:

UITableViewController manages a UITableView

参考链接:iOS Design Patterns: Model View Controller