
OC中任何类的定义都是对象,任何对象都有isa指针。isa是一个Class类型的指针。 实例的isa指针,指向类; 类的isa指针,指向元类; 元类的isa指针,指向根元类; 父元类的isa指针,也指向根元类!! 根元类的isa指针,指向它自己!!
类的superClass指向父类; 父类的superClass指向根类; 根类的superClass指向nil; 元类的superClass指向父元类; 父元类的superClass指向根元类; 根元类的superClass指向根类!!!!
struct objc_object {
Class isa OBJC_ISA_AVAILABILITY; // 指向类对象
};objc/runtime.h 中 objc_class 结构体的定义:
struct objc_class {
Class _Nonnull isa; // 指向元类
// 以下 OBJC2_UNAVAILABLE
Class _Nullable super_class; // 父类
const char * _Nonnull name; // 类名
long version; // 类的版本信息,默认为0
long info; // 类信息,供运行期使用的一些标识
long instance_size; // 该类实例变量大小
struct objc_ivar_list * _Nullable ivars; // 该类成员变量数组
struct objc_method_list * _Nullable * _Nullable methodLists; // 方法数组
struct objc_cache * _Nonnull cache; // 方法缓存
struct objc_protocol_list * _Nullable protocols; // 协议数组
};objc/runtime.h 中 objc_category 结构体的定义:
struct objc_category { // OBJC2_UNAVAILABLE
char * _Nonnull category_name;
char * _Nonnull class_name;
struct objc_method_list * _Nullable instance_methods;
struct objc_method_list * _Nullable class_methods;
struct objc_protocol_list * _Nullable protocols;
}