控制器对象作为协调器或作为一个或多个视图对象和一个或多个模型对象之间的中介。在模型视图控制器设计模式中,一个控制器对象(或简单地,一个控制器)解释视图对象中的用户行为和意图,如当用户点击或单击一个按钮或对文本框输入文字,将新的或者改变的数据传递到模型对象。当模型对象改变时,例如用户打开一个存储在文件系统中的文档,它将新的模型数据传递到视图对象以便他们能够显示它。因此,控制器是视图对象了解模型对象变化的管道,反之亦然。控制器对象也可以设置和协调应用程序的任务,并管理其他对象的生命周期。Cocoa框架提供三个主控制器类型:协调控制器,视图控制器(iOS),调节控制器(在OS X)。
协调控制器
协调控制器监督和管理整个或部分应用程序的功能。他们往往存在于应用程序特定的逻辑的地方。一个协调控制器实现了多种功能,包括:
响应委托消息和观察通知
响应行动消息(被类似按钮的controls发送,当用户点击或点击)
建立对象之间的连接,并执行其他设置任务,如应用程序启动
管理“拥有”的对象的生命周期
协调控制器通常是一个自定义NSObject的子类的实例。在OS X中,如果一个Cocoa应用程序利用的文件结构,协调控制器通常是一个NSWindowcontroller 或NSDocumentController对象。在iOS应用中,视图控制器通常包含协调控制器的作用。
视图控制器
UIKit和AppKit框架提供视图控制器类(分别在iOS和OS X)但这些类有不同的特点。在AppKit框架中,视图控制器是NSViewController类的子类的实例。视图控制器通过nib文件存储视图,视图能展示一个数据对象。视图控制器管理和更新其视图的子视图。
在UIKit,一个视图控制器管理一个显示整屏的内容的视图;它保留对这个view的引用,并可以从一个nib文件创建和加载它。该控制器管理此视图的展示和后续视图的过度。(在大多数情况下,下一个视图从右边出现)导航栏和标签栏,以及它们所有相关的呈现行为,都是通过视图控制器对象来管理和实现的。视图控制器还可以显示模态视图,响应低内存警告,以及当方向发生变化的时候旋转视图。
在iOS中一个视图控制器是UIViewController子类的实例。UIKit提供几种专用UIViewController子类,如UITableViewController。您必须扩展框架视图控制器类来使它协调视图和模型之间的工作。视图控制器通常是用于多种类型框架对象的委托或数据源对象。
中介控制器 (OS X)
一个中介控制器协调视图对象和模型对象之间的数据流动。当用户改变视图对象中的值时,中介控制器会自动将新值传递到模型对象去存储;当模型的属性改变其值时,中介控制器确保适当的视图对象显示更改的值。不像其他类型的控制器对象,它们是高度可重用的。因为这些和其他原因,中介控制器是Cocoa绑定技术的一个重要组成部分。您从Interface Builder的library中拖出中介控制器,然后配置这些对象建立控制器和它的视图对象以及模型对象之间的绑定。中介控制器通常是抽象的NSController类的具体子类的一个实例。