协议 Protocol
协议是类的合同约定,只描述外部接口,不提供具体实现。所以,协议其实可以写在类的.h文件中,不去实现就可以了。
协议可以包含以下成员:
属性 (编译器不会和普通interface那样会自动合成一个实例变量)
实例方法
类方法(不常用,因为协议主要是针对类的实例化使用的,类方法一般都直接在类里声明就好了)
初始化器和析构器(不常用)
不可以包含:实例变量
协议的使用
一个类遵守协议,需要在.h文件中声明所有@required的属性成员,在.m文件中实现所有@required方法。
如果没有全部实现的话,编译的时候会报警告信息。
协议类型的对象被赋值给非协议类型对象时,会出现警告提示。
所以,在创建方法的时候,如果把遵从某个协议的对象作为参数,必须要声明这个类满足某个协议:
void provess1(id<Drawable> obj){}
或者在使用的时候,用conformsToProtocol来检查是否实现了协议。
[obj conformsToProtocol:@protocol(AProtocol)]
协议的继承:上面的协议遵从判断,子协议也是可以通过的。
常用的协议:NSObject下的各种协议。