二十三、通过委托与数据源协议进行对象间通信
1、委托模式(Delegate Pattern):定义一套接口,某对象若想接受另一个对象的委托,则需遵从此接口,以便成为其委托对象。信息从类流向受委托者。
2、数据源模式(Data Source Pattern):定义一套接口,令某类经由该接口获取其所需数据。信息从数据源流向类。
3、delegate属性使用weak,不要引起保留环(retain cycle)。
4、如果要在委托对象上调用可选方法,需提前使用类型信息查询方法判断是否可以响应,respondsToSelector。
5、可以实现含有位段的结构体,将委托对象是否能响应相关协议方法这一信息缓存至其中,以优化程序效率。
UITableViewDelegate二十四、将类的实现代码分散到便于管理的数个分类之中
1、使用分类(Category)把类的实现代码划分成易于管理的小块。
2、将私有方法归入名为Private的分类中,以隐藏实现细节。
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分类中声明。
网友评论