建议41:明确isa在继承上的作用
我们发现 Class 本身也有一个isa指针,指向的是它的MetaClass。
当我们对一个实例发送消息时(-开头的方法),会在该 instance 对应的类的 methodLists 里查找。
当我们对一个类发送消息时(+开头的方法),会在该类的 MetaClass 的 methodLists 里查找。
参考地址:
http://ios.jobbole.com/81657/
http://www.jianshu.com/p/8036f15c91c6
建议42:利用类别和协议实现类似多重继承的机制
OC 可以通过类别(Category)和协议(Protocol)实现类似多重继承的机制,可以很好地实现代码复用和扩展。
1.虽然类别可以访问基类的实例变量,但不能添加变量,如果想要添加变量,可以考虑通过继承创建子类。
2.类别可以重载原始类的方法,但不推荐这么做,这么做的后果是再也不能访问原来的方法。如果确实要重载,正确的选择是创建子类。
3.和普通接口有所区别的是,在类别中实现文件中可以不必实现所有声明的方法,只要你不去调用它。
协议并不是真正的类,它只是声明方法,不能添加数据。协议就是一系列不属于任何类的方法列表,其中声明的方法可以被任何类实现。这种模式一般称为代理模式。
建议43:类别和类扩展是类继承的延续性拓展
类扩展可以给原有的类增加新的属性和方法。类扩展常用来定义类的私有变量和方法。如果类别是为类增加外部方法的话,那么类扩展就是用做类的内部拓展。
类别关注的重心是代码设计,把不同功能的方法分离开。
类别具有替换特性,也就是说,如果类别方法与类内某个方法具有同样的方法签名,那么类别里的方法将会替换类的原有方法。zs-可以利用这个实现热更新修复bug.
建议44:继承基类的实现行为勿忘调用super
如果打算补充基类实现的行为,请调用super.
如果打算替换基类实现的行为,就不要调用super.