四、协议与分类
23.通过委托与数据源协议进行对象间通信
“委托模式”的主旨是:定义一套接口,若对象想接受另一个对象的委托,则需遵从此接口,以便成为其“委托对象”(delegate)。而这“另一个对象”则可以给其委托对象回传一些信息,也可以在发生事件时通知委托对象。
注意:delegate属性需定义成weak,若用strong定为“拥有关系”,会导致“保留环”(retain cycle)。
用optional关键字表示为“可选的”,而且在调用可选方法前,必须提前使用类型查询方法判断这个委托对象能否响应相关选择子。
当某对象需要从另外一个对象中获取数据时,可以使用委托模式,也即数据源协议。
若有必要,可实现含有位段的结构体,将委托对象是否能响应相关协议方法这一信息缓存至其中。
24.将类的实现代码分散到便于管理的数个分类中
使用分类机制把类的实现代码划分成易于管理的小块。
将应该视为“私有”的方法归入名叫Private的分类中,以隐藏实现细节。
25.总是为第三方类的分类名称加前缀
向第三方类中添加分类时,总应给其名称和方法名加上你专用的前缀。
26.勿在分类中声明属性
在分类中添加属性,虽然我们可以在getter和setter方法用runtime来实现,但是正确的做法是把所有属性都定义在主接口里。
27.使用“class-continuation分类”隐藏实现细节
本质:如果不想对外公开,就在.m文件里声明属性、定义方法。
1.通过“class-continuation分类”向类中新增实例变量。
2.如果某属性在主接口声明为“只读”,而类内部又要用设置方法去修改此属性,那么在“class-continuation分类”中将其扩展为“可读写”。
3.把私有方法的原型声明在“class-continuation分类”里面。
4.如果想类所遵循的协议不被人知道,可以在“class-continuation分类”中声明。
28.通过协议提供匿名对象(id类型)
1.协议可在某种程度上提供匿名类型。具体的对象类型可以淡化为总从某协议的id类型,协议里规定了对象所应实现的方法。
2.使用匿名对象来隐藏类型名称。
3.如果具体类型不重要,重要的是能响应特定的方法,那么可以使用匿名对象来表示。