美文网首页
对象的isa指针指向哪里?

对象的isa指针指向哪里?

作者: buding_ | 来源:发表于2024-03-10 19:12 被阅读0次

对象的isa指针指向哪里?

*instance的isa指向class;
当调用对象方法时,通过instance的isa找到class,最后找到对象方法的实现进行调用。
*class的isa指向meta-class;
当调用类方法时,通过class的isa找到meta-class,最后找到类方法的实现进行调用。

OC类对象的信息存放在哪里?
实例对象(instance) 中存放: isa、成员变量的具体值
类对象(class) 中存放:isa、superclass、属性、协议、对象方法
元类对象(meta-class) 中存放:isa、superclass、类方法

探究一下superclass指针:

例子:
Student继承: Person   Person继承: NSObject

Student-Class 的superclass指向 Person-Class
Person-Class 的superclass指向 NSObject-Class
NSObject-Class 的superclass指向 nil
         
Student-MetaClass 的superclass指向 Person-MetaClass
Person-MetaClass 的superclass指向 NSObject-MetaClass
NSObject-MetaClass 的superclass指向 NSObject-Class

Student *stu = [Student new];
[stu personInstanceAction]; -> 通过stu的isa指针找到Student-Class,通过Student-Class的superclass找到PersonClass,从而找到personAction方法
         
[Student personClassAction]; -> 通过StudentClass的isa找到Student-MetaClass,通过Student-MetaClass的superclass找到Person-MetaClass,从而找到personClassAction方法

isa与superclass的总结图


         
                                                  nill!                        Root Class(class)!
                                                    ^                               ^
                                                    |(superclass)                   |(superclass)
                                                    |                               |
         Instance of Root Class  --(isa)-->   Root Class(class)   --(isa)-->   Root Class(meta)    --(isa)--> Root Class(meta)!
                                                    ^                               ^
                                                    |(superclass)                   |(superclass)
                                                    |                               |
         Instance of SuperClass  --(isa)-->   SuperClass(class)   --(isa)-->   SuperClass(meta)    --(isa)--> Root Class(meta)!
                                                    ^                               ^
                                                    |(superclass)                   |(superclass)
                                                    |                               |
         Instance of SubClass    --(isa)-->   SubClass(class)     --(isa)-->   SubClass(meta)      --(isa)--> Root Class(meta)!
         
         
         *instance的isa指向class
         *class的isa指向meta-class
         *meta-class的isa指向基类的meta-class
         
         *class的superclass指向父类的class, 如果没有父类则superclass指向nil
         *meta-class的superclass指向父类的meta-class,基类的meta-class的superclass指向基类的class
         
         *instance调用方法的轨迹:isa找到class,方法不存在,就通过superclass找父类的class
         *class调用方法的轨迹:isa找到meta-class,方法不存在,就通过superclass找父类的meta-class
         

从64bit开始, isa 需要 &ISA_MASK才得到真正的地址

相关文章

  • 底层2:OC对象分类

    面试题:对象的isa指针指向哪里? instance对象的isa指向class对象;class对象的isa指针指向...

  • isa指针

    对象的isa指针指向哪里?instance对象的isa指向class对象class对象的isa指向meta-cla...

  • 深入理解ObjC

    1. 对象的isa指针指向哪里? instance对象的isa``指向class对象 class对象的isa指向m...

  • 对象的isa指针指向哪里?

    对象的isa指针指向哪里? 1.instance对象的isa指针指向class。当调用对象方法时,通过instan...

  • isa和superclass

    D、题:对象的isa指针指向哪里? 拓展: class对象的superclass指针指向哪里? meta-clas...

  • isa和superClass

    isa 对象的isa指针是指向哪里的? instance的 isa 指向 class当调用对象方法时,通过inst...

  • iOS开发中方法查找流程图

    实例对象的isa指针指向类对象,类对象的isa指针指向元类,元类的isa指针指向根元类,根元类的isa指针指向自己...

  • isa指针superclass

    isa指针的指向 实例对象的isa指针指向类对象 类对象的isa指针指向元类对象 isa的作用就是用来给实例找到各...

  • isa 和superClass 指针

    对象的isa指针指向哪里? OC对象: instance class meta-classinstcane...

  • iOS Runtime面试题(isa指针)

    说一下对 isa 指针的理解, 对象的isa 指针指向哪里?isa 指针有哪两种类型? isa 等价于 is ki...

网友评论

      本文标题:对象的isa指针指向哪里?

      本文链接:https://www.haomeiwen.com/subject/nirpzdtx.html