isa指针
我们在OC的对象中了解到,每种对象有一个isa指针,他们的关系是:
-
instance对象的isa指向它class对象
- 当调用时,通过instance的isa找到相应的class对象,然后在class对象中找到的实现,进行调用
-
class对象的isa指向meta-class对象
- 当调用时,通过class对象的isa找到相应的meta-class对象,然后在meta-class对象中找到的实现,进行调用
- meta-class对象的isa指向基类的meta-class对象
注意:从64bit开始,isa指针的值 & ISA_MASK 的值,才能得到真实class对象的地址
superclass
我们在OC的对象中了解到,class对象和meta-class对象中都有一个superclass指针,它的作用是找到相应的父类class对象,然后找到父类对象里面的信息。
-
class对象的superclass 指针,指向父类的class对象;基类的class对象的superclass为nil
当调用时,通过当前实例对象的isa指针,在当前类的class对象中查找方法的实现,当没有找到方法的实现,就会通过class对象的superclass指针,找到父类的class对象,一直下去,直到找到方法实现,然后调用。最终都没找到的情况,在runtime中会说到。 -
meta-class对象的superclass 指针,指向父类的meta-class的对象
当调用时,通过class对象的isa指针,在当前类的meta-class对象中查找类方法的实现,当没有找到类方法的实现,就会通过meta-class的superclass指针,找到父类的meta-class对象,一直下去,直到找到方法,然后调用。 - 基类的meta-class对象的superclass指针,指向基类的class对象
网友评论