美文网首页
第四章:协议与分类

第四章:协议与分类

作者: LucXion | 来源:发表于2016-11-04 19:37 被阅读0次

协议:类不支持多重继承, 所以我们把某个类应该实现的一系列方法定义在协议里面,协议最常见的用途是实现委托模式(代理),理解并善用协议能够令代码变得更易维护,因为协议这种方式能够很好的描述接口。

分类:利用分类的机制,我们无需继承子类即可为当前类添加方法,在其他编译语言中,则需通过继承子类来实现。(分类的功能是类的功能拓展,而不是类的封装)
协议-> 委托模式(代理) 可将数据与业务逻辑解耦,比如视图只显示数据,不应该处理交互
使用weak修饰delegate对象,避免循环引用

0EC0862D-E6AE-4FB8-A409-931997C9C0F1.png

协议-> 数据源协议:当某个对象需要从另外一个对象中获取数据时

  • 技巧二十:调用代理时的性能优化(需要多次调用代理的情况,比如数据源代理)
以往的处理:
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

相关文章

网友评论

      本文标题:第四章:协议与分类

      本文链接:https://www.haomeiwen.com/subject/nnswuttx.html