第四章:协议与分类

2016-11-04  本文已影响0人  LucXion

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

分类:利用分类的机制,我们无需继承子类即可为当前类添加方法,在其他编译语言中,则需通过继承子类来实现。(分类的功能是类的功能拓展,而不是类的封装)
协议-> 委托模式(代理) 可将数据与业务逻辑解耦,比如视图只显示数据,不应该处理交互
使用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];    
    }
上一篇 下一篇

猜你喜欢

热点阅读