类似Java的泛型与接口的结合体,用于类型的<>中,可以多继承(按照OC的说法叫遵从某些协议)
1、定义协议
@protocol Client <NSObject>
-(void)defaultMethod;//默认必须实现
@required//必须
-(void)required;
@optional//可选
-(void)optional;
@end
2、符合(实现)协议
#import "Client.h"
@interface JackClient : NSObject<Client>
@end
@implementation JackClient
-(void)defaultMethod{
NSLog(@"this is defaultMethod");
}
-(void)required{
NSLog(@"this is required method");
}
@end
3、使用并调用回调
#import "Client.h"
#protocol JackClient
@interface Test : NSObject<Client>{
id<Client> client;
}
-(id)initWithClient:(id<Client>) client;
-(void) turnTheCrank;
@property(retain) id<Client> client;
@end
@implementation Test
-(id)initWithClient:(id<Client>)client{
self = [super init];
if (self) {
_client = client;
}
return self;
}
-(void) turnTheCrank{
[self.client defaultMethod];
[self.client required];
if ([self.client respondsToSelector:@selector(optional)]) {//可选回调可先判断是否实现,再调用
[self.client optional];
}
}
@end
最后
[[[Test alloc]initWithClient:[[JackClient alloc] init]] turnTheCrank];