有关协议的注意事项:
A、如果一个类遵守某项协议,那么它的子类也遵守该协议。
B、协议不引用任何类,它是无类的(classless) 。任何类都可以遵守某项协议。
C、通过在类型名称之后的尖括号中添加协议名称,可以借助编译器的帮助来检查变量的一致性,如
下:
id <Drawing> currentObject;
这告知编译器 currentObject 将包含遵守 Drawing 协议的对象。 如果向currentObject 指派静态类型的对
象,这个对象不遵守 Drawing 协议,编译器将给出 warning。
再次提到 id 类型,如果向 currentObject 指派一个 id 变量,不会产生这条消息,因为编译器不知道存
储在 id 变量中的对象是否遵守 Drawing 协议。 D、如果这个变量保存的对象遵守多项协议,则可以列出多项协议,如下:
id <Drawing, Drawing 1> currentObject; E、定义一项协议时,可以扩展现有协议的定义。以下协议
@protocol Drawing3D <Drawing>
说明 Drawing3D 协议也采用了 Drawing 协议。因此采用 Drawing3D 协议的类都必须实现此协议列出
的方法,以及 Drawing 协议的方法。 F、分类也可以采用一项协议,如:
@interface Fraction (stuff) <NSCopying, NSCoding>
此处,Fraction 拥有一个分类 stuff,这个分类采用了 NSCopying 和 NSCoding 协议。