《Effective Objective-C 2.0》读书笔记(

2019-04-08  本文已影响0人  KeyboardDirver

第四章 协议与分类

第25条:通过委托与数据源协议进行对象间通信

委托模式 可以将数据与业务逻辑解耦。比如tableview中的datource和delegate 分别负责数据和事件处理,我们称之为“数据源”和“委托”。


IMG_2011.JPG
struct{
    unsigned int didReceiveData      :1;
    unsigned int didFailWithError    :1;
    unsigned int didUpdateProgressTo :1;
} _delegateflags;

- (void)setDelegate:(id<EOCNetWorkFetcher>)delegate{
    _delegate = delegate;
    _delegateflags.didReceiveData = [delegate respondsToSelector:@selector(networkFetcher:didFailWithError:)];
    _delegateflags.didFailWithError = [delegate respondsToSelector:@selector(networkFetcher:didReceiveData:)];
    _delegateflags.didUpdateProgressTo = [delegate respondsToSelector:@selector(networkFetcher:didUpdateProgressTo:)];
}

//每次调用delegate的相关方法不用检测委托对象是否能响应给定的选择子,而是直接查询结构里的标志:
if(_delegateFlags.didUpDateProgressTo){
  [_delegate networkFetcher:self didUpdateProgressTo:currentProgress];
}

要点

第24条:将类的实现代码分散到便于管理的数个分类中

要点

第25条:总是为第三方类的分类名称添加前缀

分类中的方法如果在类中已经声明实现,那么分类中的实现将会发改类中的原有实现。
要点

第26条:勿在分类中声明属性

属性、成员变量、实例变量的关系和区别?
要点

第27条:使用“class - continuation分类”隐藏实现细节

要点

第28条:通过协议匿名对象

本书中的“匿名对象”与其他语言中的“匿名对象”不同,在那些语言中,该词指以内联形式所创建出来的无名类,而在Objective-C中则不是这个意思。

在项目中使用@protocol 不管是delegate dataSource 传值等。 还是解耦的重要手段,在MVP设计模式中就打想使用了@protocol来达到解耦的作用。

要点

上一篇下一篇

猜你喜欢

热点阅读