@protocol是什么
OC里面叫协议,JAVA里面与其对应的叫接口,C++里面叫抽象类
一种只定义函数名,不具体写实现,由不同的实例化对象(代理)执行不同内容的方法
protocol分析
@protocol protocolName <NSObject>
@required
- (void)requiredProtocolFunction;
@optional
- (void)optionalProtocolFunction;
@end
delegate分析
delegate(代理),就是要具体实现方法内容的实例化对象,通常被声明为一个id类型的遵循某个protocol的指针,可以为任意名字,但是一般都叫delegate
@interface className : NSObject
@property (nonatomic, weak) id<protocolName> delegate;
@end
被该指针指向的类也需要遵循同样的协议className.delegate = class<protocolName>
protocol执行时的检查(坑坑坑!!!)
protocol执行时一定要进行检查,不然如果delegate不存在或者具体协议函数没实现,那么就Crash!!!
//先问代理在不在,再问代理是否遵循某协议,然后去干
if (self.delegate && [self.delegate conformsToProtocol:@protocol(protocolName)]) {
[self.delegate doProtocolFunction];
}
//先问代理在不在,再问代理存在不存在某个实现,然后去干
if (self.delegate && [self.delegate respondsToSelector:@selector(protocolFunction)]) {
[self.delegate doProtocolFunction];
}
网友评论