instance of Subclass :子类的实例对象
Subclass(class):子类的类对象
Subclass (meta):子类的元类对象
instance of Superclass : 父类的实例对象
Supercalss (class) : 父类的类对象
Superclass (meta) : 父类的元类对象
instance of Root class : 根类的实例对象(基类的实例对象)
Root class( class ) :根类的类对象
Root class (meta) : 根类的元类对象
根类、基类 一般都是指:NSObject
instance(实例)对象的isa指向其`class`对象;
class对象的`isa`指针指向 `meta-class`(元类)对象
meta-class(元类)对象的isa指针指向基类(一般是指`NSObject`)的`meta-class`对象
class的superclass指向父类的class,如果没有父类,superclass指针为nil
meta-class的superclass指向父类的meta-class;基类的meta-class的superclass指向基类的class
instance调用实例方法的轨迹;isa找到class,方法不存在,就通过superclass找父类
class调用类方法的轨迹;isa找meta-class,方法不存在,就通过superclass找父类
但是被KVO监听的对象除外,因为KVO监听会在运行时生成新的派生类。isa指针指向的是这个衍生类。
superclass 指针指向:
Student类继承自Person;Person继承自NSObject 那么各类对象superclass指向?
类对象的superclass指针指向父类对象
<1> class对象的superclass指向父类的class对象(如果这个class对象没有父类,那么它的superclass指针为空)
<2> meta-class对象的superclass指向父类的meta-class对象, 根类的meta-class对象的superclass指向根类自己的class对象
instance 调用对象方法的轨迹 先通过
isa指针找到实例对象的类对象,查看类对象中是否存在这个方法,存在就直接展开调用;如果不存在,需要通过类对象的superclass指针找到类对象的父类,查看父类中是否存在这个方法,存在就直接展开调用;不存在就找父类的父类,直到找到NSObject,存在这个方法就展开调用 ,不存在就抛出方法未找到的异常错误。
class 调用类方法的轨迹 先通过
isa指针找到类对象的元类对象,查看是否存在这个方法,存在就直接展开调用;如果不存在,需要通过元类对象的superclass指针找到父类的元类,查看父类的元类中是否存在这个方法,存在就直接展开调用;不存在就找父类的元类的父类的元类,直到找到NSObjcet的元类,存在这个方法就展开调用,不存在就去找NSObjcet的类对象,存在这个方法就展开调用 ,不存在就抛出方法未找到的异常错误。