OC底层类对象

206 阅读1分钟

类对象是一个结构体,并且每个类只有一个类对象

类对象和元类不是指向的一个内存空间 Objc_class *class

Objc_class : Objc_object 是一个类对象

类对象的isa ---> 元类 元类的isa ---> 根元类 根元类的isa指向自己

NSobject是根类 它的isa --->根元类

NSObject没有父类(父类是nil),,根元类的父类指向NSObject

NSObject是万类之父

实例对象 isa -->类对象 isa --->元类 isa --->根元类 根元类的isa指向自己

元类的父类 就是父类的元类

类对象的结构

    // Class ISA;   // 8字节
    Class superclass;  //8 

    cache_t cache;   //16字节           // formerly cache pointer and vtable

    class_data_bits_t bits;  // 从32字节开始
    friend objc_class;
    public:
    class_rw_t* data() const {     //数据存在class_rw_t里面
        return (class_rw_t *)(bits & FAST_DATA_MASK);
    }

class_rw_t 结构体里面存储 method、property、protocal

方法列表:存储的实例方法, 如果对象有成员变量的 系统会自动生成.cXX_destruct方法 用来释放成员变量

强转命令:p/X(类型*)内存地址 p/4gx 4个八字节 p/6gx 6个八字节

从内存读取数据,会用到内存偏移读取

  • 数据在内存中的存储方式有大端 和小端
  • 大端 :高位存低地址位,低位存高地址位
  • 小端 :高位存高地址位,低位存低地址位

16进制 2位代表一个字节 0x12

2进制 8位代表一个字节 0b 1111 1111