协议(类似于接口)
定义:协议是多个类,共享的一个方法列表。(协议中列出的方法没有相应的实现,计划由其他人来实现;实际上有些可以选择实现,有些必须实现)
1.协议的声明:
@protocol NSCopying
-(id) copyWithZone: (NSZone*) zone;
@optional //这个指令之后列出的所有方法都是可选的,以上的是必须实现的。
-(void) deal;
@end
2.一个类遵循某个协议,那么其子类也要遵循(分组也一样)
3.对于一个类来说,可以定义属于自己的协议,要求继承自己的子类都实现这些方法。(即为某一个类定义一个协议,也是协议的一种运用)
4.可以使用conformsToProtocol:方法检查一个对象是否遵循某项协议。
例如:
id currentObject;
...
if([currentObject conformsToProtocol:@protocol(Drawing)] == YES)
{...}//使用@protocol 指令获取一个协议名称,并产生一个Protocol对象,作为参数给conformsToProtocol
5.测试currentObject是否实现了可选的deal方法,可以使用:
if([currentObject respondsToSelector: @selector(deal)] == YES)
{...}
6.id:声明一个指向对象的指针。
id <Drawing> currentObject ; //告知编译器currentObject对象将包含遵守Drawing协议的对象。
7.定义协议时,可以拓展自身协议:
@interface Drawing3D<Drawing> //说明Drawing3D也使用了协议Drawing
8.分类也可以采用多项协议
@interface Fracton(stuff) <NSCopying,NSCoding> (这种生命如果不想在公开的.h文件中实现,也可以在实现的.m文件中进行)