delegation 委托

委托

       委托是一种简单而强大的模式。在此模式中,程序中的一个对象代表另外一个对象执行某个动作,或者与之相互协作共同完成某个任务。发布委托的对象持有其他对象(委托)的引用。在适当的时候,它会向委托发送消息。消息用于通知委托对象发布委托的对象将要处理或者已经处理某个事件。作为响应,委托对象会更新外观或者更新自身或应用程序其他对象的状态。在某些情况下,委托对象也可以返回一个值,通过它来影响事件(即将被处理的事件)的处理方式。通过委托,我们可以以某个对象为中心,轻松定制周围的数个对象。

       委托是一种对象,另一个类的对象会要求委托对象执行它的某些操作。

委托和Cocoa框架

通常情况下,发布委托的是框架对象,委托是定制的控制器对象 。发布委托对象持有委托的弱引用。Foundation、UIKit、AppKit以及其他的Cocoa及Cocoa Touch框架有很多地方使用委托。

在AppKit 框架中,NSWindow类的实例是一个发布委托的对象。 NSWindow声明一个协议,windowShouldClose:是协议的一个方法。当用户点击某个窗口关闭框时,窗口对象向委托发送windowShouldClose:消息,要求它确认窗口是否关闭。委托则返回一个Boolean类型值,通过该值控制窗口对象的行为。

委托和通知

大部分Cocoa框架类的委托都自动注册为发布委托对象所发通知的观察者 。委托只需实现框架类声明的某个通知方法,以此接收特定的通知。仍以上述例子进行说明,窗口对象向观察者发送NSWindowWillCloseNotification消息,但是向委托发送 windowShouldClose:消息。

数据源

数据源几乎等同于委托,不同之处在于它同发布委托对象的关系。发布委托对象并不把对于用户界面的控制转交给它,而是把数据控制交给它。发布委托对象,通常是诸如表视图这样的视图对象。它持有数据源引用,并时不时向其索要待显示数据。数据源和委托一样,也必须遵循某种协议并至少实现协议所要求的方法。数据源负责管理模型对象的内存,并将其提供给发布委托的视图。

转自http://www.apple.com.cn/developer/iphone/library/documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html

你可能感兴趣的:(框架,cocoa,任务)