协议
通常情况下,对象的主要作用是表示所处理的消息的类型,而表示对象的作用和行为的方法的集合体就称为协议(protocol)。
协议这个称呼通常用于表示互联网的通信协议。OC中的协议最初就是从各个对象之间通信协议中抽象出来的一种概念。与Java中的接口类似。
对象的协议
在对象模型化的软件世界,不同的对象也可以包含相同的方法集合,但通常情况下这些对象并不是继承关系。
OC中的协议仅仅是声明方法的集合体,实现方法则由各个类自行完成,因此使用协议的各个类是否有继承关系都不重要,重要的是如何实现这些方法。在使用协议的情况下,如果该类实现的改协议的所有方法,则称该类遵循该协议。
协议的声明
@protocol 协议名
声明方法;
@end
协议的采用
@interface 类名:超类名<协议1,协议2>{
声明接口变量;
}
声明方法;
@end
协议的继承
@protocol 协议1<协议2>
声明方法;
@end
协议的必选以及可选功能
协议列举的方法中,分为必须实现的方法和可选择实现的方法,也就是说可以指定不用实现的方法。
- @optional后面方法是可选实现的
- @required 默认是@required表示方法是必选的
多继承
在OC中是没有多继承的,但是通过对协议以及其他编程技术的组合能达到同样的效果。
非正式协议
为了简化协议,出现了非常正式协议。非正式协议只是作为范畴进行声明,并没有实现。
- 非正式协议被称为NSObject类的范畴
- 非正式协议中声明的方法不一定要实现
- 编译时不检查类对非正式协议的适用性
- 运行时,只确认是否实现了方法。