IOS开发学习----委托和协议

 

委托:代表另一个对象

在委托中,一个称为委托的对象应另一个对象的请求,作为该对象的代表。作出委托的对象,通常是框架模型。在执行的某些时候,它会向其委托发送消息,告诉委托即将发生某些事件,并要求给它回应。委托(通常是自定类的实例)实施供该消息调用的方法,并返回相应的值。通常该值是一个 Boolean 值,告诉作出委托的对象是否继续操作。

 

委托因此是一种将应用程序特定行为加入框架类工作的手段,而无需给该类创建子类。它是一种常见的、强大的设计,来扩展和影响框架的行为。

您应该记得,在编写“您的首个 iOS 应用程序”HelloWorld 时,创建了 HelloWorldAppDelegate 对象。Xcode 自动将其分配为应用程序对象(为框架对象)的委托。应用程序委托可以处理 application:didFinishLaunchingWithOptions:,以及应用程序对象发送给它的其他委托消息。

有两个可编程的组件用于委托。委托类必须定义属性(通过名称为 delegate 的约定),以保存一个指向委托的参考。它还必须声明委托类必须采用的协议(请参阅以下部分以获得有关协议的更多信息)。Cocoa Touch 和 Cocoa 框架的许多类,都提供委托作为一种方式,给应用程序用来增加其特定的框架行为。

但是委托并不局限于框架类。您可以在应用程序的两个自定对象之间实施委托。Cocoa Touch 应用程序常见的设计,是将委托作为一种手段,允许子视图控制器将某些值(通常为用户输入的值)传达到父视图控制器。

 

协议:使不相关的对象之间能通过继承进行通信

协议是可编程接口的声明,任何类都可以实施它的方法。与协议相关联的类实例,调用协议的方法,并获取由该类正式采用和实现该协议所返回的值。对象之间的此类通信,产生了一个特定目标,例如解析 XML 代码或拷贝对象。协议接口两边的对象可以通过继承,实施远距离彼此相关。协议因此和委托一样,可作为子类化的替换手段,通常是框架实施委托的一部分。

 

Apple 提供的框架,声明了数十个协议。此外,您的应用程序可以声明自定协议,让类可以采用。协议是您编程工具箱的一部分。《Programming with Objective-C》(使用 Objective-C 编程)对协议进行了综合描述。

 

通知中心:通知对事件感兴趣的观察者

通知中心是 Foundation 框架的一个子系统,它向应用程序中注册为某个事件观察者的所有对象广播消息(即通知)。(从编程角度而言,它是 NSNotificationCenter 类的实例)。该事件可以是发生在应用程序中的任何事情,例如进入后台状态,或者用户开始在文本栏中键入。通知是告诉观察者,事件已经发生或即将发生,因此让观察者有机会以合适的方式响应。通过通知中心来传播通知,是增加应用程序对象间合作和内聚力的一种途径。

 

例如,iOS 应用程序中的视图控制器,可以观察 UIKeyboardWillShowNotification 通知,以调整其视图的几何图形,来容纳虚拟键盘。正如此例所示,通知是一个对象,该对象的名称指明了一个特定事件,以及该事件是已经发生或将要发生。它还将一个引用(指向发布或发送通知的对象)送到通知中心,而它可以包含补充信息字典。

任何对象都可以观察通知,但要做到这一点,该对象必须注册,以接收通知。在注册时,它必须指定选择器,以确定由通知传送所调用的方法;方法签名必须只有一个参数:通知对象。注册后,观察者也可以指定发布对象。

通知中心的通知跟委托消息相似;当某些事件发生时,两者都发送给任意对象。但是,处理通知的方法与委托方法不同,它不能返回值。通过通知中心的通知是同步的,与委托一样。

应用程序的自定对象可定义和发布自己的通知,其他自定对象则可以观察该通知。

posted @ 2013-06-04 15:24  张晓丹  阅读(284)  评论(0)    收藏  举报