一、介绍
协议是一组预定义的方法,一个类可以选择来实现它们。
当对象需要与一个或多个对象对话,但是不知道对象的类时,协议特别有用。
Objective-C中的协议相当于Java中的接口。
协议在整个Cocoa框架中使用。Objective-C拥有正式的和非正式的协议。正式的协议声明了一组必需的方法,可能还有某些可选的方法。随后,类可以通过实现协议所必需的所有方法来实现该协议。当一个类声明它使用的正式协议时,编译器会检查,确保该类实现了协议所有必需的方法。非正式协议则只是在一个子类头文件中的一个方法声明的列表,一个类可以选择来实现这些方法。
二、使用
>采用一个协议的类,必须实现协议的所有必须的方法
>采用一个协议的类,可以自由的实现或不实现协议的任何可选方法
>类可以实现多个协议,协议也可以实现协议
>可选和必需的方法分别使用@optional 和 @required指令来标记
>类通过在类的@interface 行的超类名称之后的一个尖括号中放置字而已的名称,从而声明其采用了该协议。包含了协议声明的头文件,对于采用协议的类的@interface部分,必须是可见的
三、iOS中消息传递模式
通知:在iOS中由通知中心进行消息接受和消息广播,是一种一对多
代理:是一种通用的代理模式,iOS中对代理支持的很好,由代理对象,委托者,协议三部分组成
block:一种回调方法,可将毁掉代码直接写在block代码块中
target action:通过将对象传递到另一个类中,在另一个类中将该对象作为target的方法来调用该对象方法,从内存角度看与代理类似
KVO:NSObject的Category -NSKeyValueObserving,通过属性监听的方式来监测某一个值的变化,当值发生变化时调用KVO回调方法
四、代理设计模式
代理的基础使用:
代理是一种通用的设计模式,在iOS中代理模式支持的很好,有特定的语法来实现代理模式,OC语言可以通过@protocol实现协议
代理由三部分组成:
协议:用来制定代理双方可以做什么,必须做什么
代理:根据指定的协议,完成委托方需要实现的功能
委托:根据指定的协议,制定代理去完成什么功能
在委托方调用代理方法时都需做一个判断,判断代理是否实现当前方法,否则程序崩溃
代理对象只能是弱引用
五、链接
http://my.oschina.net/u/2472425/blog/649179
http://my.oschina.net/zboy/blog/493104