类对象是一个结构体,并且每个类只有一个类对象
类对象和元类不是指向的一个内存空间 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个八字节
从内存读取数据,会用到内存偏移读取
- 数据在内存中的存储方式有大端 和小端
- 大端 :高位存低地址位,低位存高地址位
- 小端 :高位存高地址位,低位存低地址位