第四章:协议与分类
2016-11-04 本文已影响0人
LucXion
协议:类不支持多重继承, 所以我们把某个类应该实现的一系列方法定义在协议里面,协议最常见的用途是实现委托模式(代理),理解并善用协议能够令代码变得更易维护,因为协议这种方式能够很好的描述接口。
分类:利用分类的机制,我们无需继承子类即可为当前类添加方法,在其他编译语言中,则需通过继承子类来实现。(分类的功能是类的功能拓展,而不是类的封装)
协议-> 委托模式(代理) 可将数据与业务逻辑解耦,比如视图只显示数据,不应该处理交互
使用weak修饰delegate对象,避免循环引用
协议-> 数据源协议:当某个对象需要从另外一个对象中获取数据时
-
技巧二十:调用代理时的性能优化(需要多次调用代理的情况,比如数据源代理)
以往的处理:
if ([self.delegate respondsToSelector:@selector(didSomeThing)]) {
[self.delegate didSomeThing];
}
优化步骤:
1.声明一个结构体
struct {
unsigned int didSomeThing : 1;
}_delegateFlag;
2.再重写delegate的setter方法
-(void)setDelegate:(id<PeopleDelegate>)delegate{
_delegate = delegate;
_delegateFlag.didSomeThing = [delegate respondsToSelector:@selector(didSomeThing)];
}
3.调用代理方法时:
if(_delegateFlag.didSomeThing){
[self.delegate didSomeThing];
}
-
技巧二十一:将类的实现代码分散到便于管理的数个分类当中
-
技巧二十二:向第三方库添加分类时,要给分类名,分类方法加上自己的前缀,避免出现方法覆盖而产生奇怪的bug