第 4 章 协议与分类
2016年6月5日
0.利用分类机制,我们无须继承子类即可直接为当前类添加方法,而在其他编程语言中,则需通过集成子类来实现。由于 Objective-C 运行期系统是高度动态的,所以才支持这一特性。
1.使用分类机制把类的实现代码划分成易于管理的小块
2.将应该视为“私有”的方法归入名叫 Private 的分类中,以隐藏实现细节。
3.分类中的方法是直接添加在类里面的,他们就好比这个类中的固有方法。将分类方法加入类中这一操作是在运行期系统加载分类时完成的。运行期系统会把分类中所实现的每个方法都加入类的方法列表中。如果类中本来就有此方法,而分类又实现了一次,那么分类中的方法会覆盖原来那一份实现代码。实际上可能会发生很多次覆盖,比如某个分类中的方法覆盖了“主实现”中的相关方法,而另外一个分类中的方法又覆盖了这个分类中的方法。多次覆盖的结果以最后一个分类为准。
4.要解决上述问题,一般的做法是:以命名空间来区别各个分类的名称与其中所定义的方法。想在 Objective-C 中实现命名空间功能,只有一个办法,就是给相关名称都加上某个公用的前缀。
5.除了 class-continuation 分类 之外,其他分类都无法向勒种新增实例变量,因此,他们无法把实现属性所需的实例变量合成出来。
6.通过类的匿名分类向类中新增实例变量,如果某属性在主接口中声明为“只读”,而类的内部又要用设置方法修改此属性,那么就在匿名分类中将其扩展为可读写
7.若想使类所遵循的协议不为人所知,则可以在匿名分类中声明
8.协议可在某种程度上提供匿名类型。具体的对象类型可以淡化成遵从某协议的 id 类型,协议里规定了对象所应实现的方法。
9.使用匿名对象来隐藏类型名称(或类名)。