isa指针指向和类结构分析

isa指针指向和类结构分析

isa指向图

经典的isa指向图


isa流程图.png

从这张图能总结出
类继承自父类,父类继承于NSObject,NSObject继承于nil;
isa指向为:对象->类对象->元类对象->根元类; 根元类的isa指向自己,且根元类继承自NSObject;

类结构分析

ios类到底是什么?

把类编译成c++文件,发现 类被编译成一个struct

typedef struct objc_class *Class;

我们在源码中直接搜索 struct objc_class,然后定位到 objc-runtime-new.h 文件

struct objc_class : objc_object {
    // Class ISA;
    Class superclass;
    cache_t cache;             // formerly cache pointer and vtable
    class_data_bits_t bits;    // class_rw_t * plus custom rr/alloc flags

    class_rw_t *data() const {
        return bits.data();
    }
    
    // 省略部分代码.......
}

/// Represents an instance of a class.
struct objc_object {
    Class _Nonnull isa  OBJC_ISA_AVAILABILITY;
};

objc_class 继承 objc_object能看出两个问题

  1. 对象与objc_object关系是继承关系
    2.objc_object中有isa,这就验证了对象,类,元类都有isa

objc_class, objc_object ,NSObject,object,isa之间的关系图

2251862-7b4c0996f92eb166.png

具体分析类结构

ObjC 类中的属性、方法还有遵循的协议等信息都保存在 class_rw_t中

你可能感兴趣的:(isa指针指向和类结构分析)