协议是什么

2017-08-18  本文已影响1人  猪队友小L

@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];
}
上一篇 下一篇

猜你喜欢

热点阅读