isa与superclass的总结

class对象中存储:
isa
superclass
属性(property)
实例方法
协议

meta-class对象中存储:
isa
superclass
类方法

isa

  1. instance对象的isa指向class对象
  2. class对象的isa指向meta-class对象
  3. meta-class对象的isa指向基类(NSObject的meta-class)对象
  4. 基类(NSObject的meta-class)对象的isa指针指向自己

instance->class->meta-class->root-class->root-class

superclass

class对象的superclass指向父类的class对象
meta-class对象的superclass指向父类的meta-class对象
root-meta-class对象的superclass指向root-class对象

调用流程

对instance对象发送消息

  1. 会通过isa指针找到自己的class对象
  2. 在class对象的方法列表中查找方法
  3. 未找到时,通过superclass找到自己的父类class对象继续查找,找到时直接调用。

对class对象发送消息

  1. 通过isa指针找到class对象
  2. 再通过class对象的isa指针找到meta-class对象
  3. 通过superclass找到自己的父类meta-class对象继续查找,最后到达root-meta-class时还未找到,则到root-class中最后再查找一次。
You Might Also Like
发表评论