美文网首页
isa和superclass

isa和superclass

作者: 爱学的小姚 | 来源:发表于2021-10-28 16:23 被阅读0次
image.png
根据我之前写的关于iOS 实例对象的本质,可以知道,实例化对象的本质是包含isa指针和成员变量的结构体,
struct NSObject_IMPL {
    Class isa;
};

818版本源码中,类的数据结构如下所示

//  class为objc_class *类型的结构体
typedef struct objc_class *Class;

struct objc_object {
    isa_t isa; //  Class isa
}

struct objc_class : objc_object {
    ......
    // 包含Class isa;
    Class superclass;
    cache_t cache;      //  方法缓存         
    class_data_bits_t bits;    //  & FAST_DATA_MASK之后,在class_rw_t *中获取类的具体信息
    ......
}

简化后为:

struct objc_class {
    isa_t isa;
    Class superclass;
    cache_t cache;      //  方法缓存         
    class_data_bits_t bits;    //  & FAST_DATA_MASK之后,在class_rw_t *中获取类的具体信息
}

我们知道实例对象包含isa指针,现在我们发现类的数据结构中包含isasuperclass,其中isa指针的指向是平级(经过& ISA_MASK位运算之后),既:subClass的实例对象的isa指针,指向subClass类,subClass类的isa指向subClass元类

image.png
subClass类的superclass指针,指向其父类supClasssupClass类的isa指向NSObject
image.png

关于isa指针

当调用对象方法时,实例对象的isa指向类,通过实例对象的isa找到class,最后找到对象方法的实现进行调用
当调用类方法时,类的isa指向meta-class(元类),通过类的isa找到meta-class(元类),最后找到类方法的实现进行调用

关于superclass指针

subClass的实例对象要调用supClass的对象方法时,会先通过isa找到subClass,然后通过superclass找到supClass,最后找到对象方法的实现进行调用
subClass类要调用supClass的类方法时,会先通过isa找到subClassmeta-class(元类),然后通过superclass找到supClassmeta-class(元类),最后找到类方法的实现进行调用

相关文章

  • iOS-浅谈OC中isa和superclass的指针指向

    目录 isa指针----isa指针指向superclass指针----class对象的superclass指针--...

  • iOS:isa与superclass

    目录一,对象的三种类型二,对象的存储信息三,isa指针四,superclass指针五,isa和superclass...

  • 笔记 - isa和superclass

    isa的调用 class的superclass meta-class的superclass 总结1 总结2 isa...

  • isa和superclass

    isa指针 将Objective-c代码转换成 C\C++的代码 找到[person personInstance...

  • isa和SuperClass

    开局一张图 刚开始看这图时,我也是懵的 其实也很好理解,这得分开看 虚线 实线 根类、基类 一般都是指:NSObj...

  • isa和superClass

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

  • isa和superclass

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

  • isa 和 superclass

    OC对象的分类OC中的对象,简单来说可以分为三大类:instance 对象(实例对象)、class 对象(类对象)...

  • isa 和 superclass

    实例对象的 isa 指向类对象,类对象的 isa 指向元类对象,元类的isa 指向基类的元类对象,基类的元类对象的...

  • isa和superClass

    Objective-C的本质 我们平时编写的Objective-C代码,底层实现其实都是C\C++代码,Objec...

网友评论

      本文标题:isa和superclass

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