isa指针指向和类结构分析
isa指向图
经典的isa指向图
从这张图能总结出
类继承自父类,父类继承于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
能看出两个问题
- 对象与
objc_object
关系是继承关系
2.objc_object
中有isa
,这就验证了对象,类,元类都有isa
objc_class
, objc_object
,NSObject
,object
,isa
之间的关系图
具体分析类结构
ObjC 类中的属性、方法还有遵循的协议等信息都保存在 class_rw_t中