Effective Objective-C 2.0笔记(四)

二十三、通过委托与数据源协议进行对象间通信

1、委托模式(Delegate Pattern):定义一套接口,某对象若想接受另一个对象的委托,则需遵从此接口,以便成为其委托对象。信息从类流向受委托者。

2、数据源模式(Data Source Pattern):定义一套接口,令某类经由该接口获取其所需数据。信息从数据源流向类。

3、delegate属性使用weak,不要引起保留环(retain cycle)。

4、如果要在委托对象上调用可选方法,需提前使用类型信息查询方法判断是否可以响应,respondsToSelector。

5、可以实现含有位段的结构体,将委托对象是否能响应相关协议方法这一信息缓存至其中,以优化程序效率。

Effective Objective-C 2.0笔记(四)_第1张图片
UITableViewDelegate

二十四、将类的实现代码分散到便于管理的数个分类之中

1、使用分类(Category)把类的实现代码划分成易于管理的小块。

2、将私有方法归入名为Private的分类中,以隐藏实现细节。

Effective Objective-C 2.0笔记(四)_第2张图片
NSURLSession Category

二十五、总是为第三方类的分类名称加前缀

1、分类机制通常用于向无源码的既有类新增功能。

2、将分类方法加入类中这一操作是在运行期系统加载分类时完成的。

3、添加分类时,总应给其名称加上前缀。

4、添加分类时,总应给其中的方法加上前缀。

二十六、勿在分类中声明属性

1、属性是封装数据的方式,尽量把封装数据的所用的全部属性都定义在主接口里。

2、分类目标在于拓展类的功能,而非封装数据。

3、除了class-continuation分类之外,其他分类都无法向类中新增实例变量,因此,他们无法把实现属性所需的实例变量合成出来。

4、使用关联对象能够解决在分类中不能合成实例变量的问题,但不推荐。

二十七、使用class-continuation分类隐藏实现细节

1、class-continuation分类必须定义在其所续接的类的实现文件中,是唯一能声明实例变量的分类。

2、如果某属性在主接口中声明为readonly,而类的内部要用设置方法修改此属性,那就在class-continuation分类中将其扩展为readwrite。

3、若想使类所遵循的协议不为人知,则可于class-continuation分类中声明。

二十八、通过协议提供匿名对象

你可能感兴趣的:(Effective Objective-C 2.0笔记(四))