首先类的本质是C++的struct
类的内存结构
OC对象细分为三类,实例对象(Instance),类对象(Class),元类对象(Meta-Class)
结构图如上
isa
这里才能好好的回答下isa,实例对象的isa指向类对象,类对象的isa指向元类对象,而元类对象的isa指向根元类(一般来说就是NSObject的元类)
Superclass
Superclass,这也是个指针,指向父类的指针,类对象就是指向父类的类对象,元类对象就是指向父类的元类对象,值得一提的是,所有的Superclass最终归属是rootClass(一般情况下都是NSObject)的类对象,而rootClass的Superclass指向nil
NSObject *obj = [[NSObject alloc] init];
Class oClass = [obj class]; //获取类对象
Class metaClass = object_getClass(oClass); //获取元类对象
NSLog(@"%p",oClass); //0x7fff8071b088
NSLog(@"%p",metaClass); //0x7fff8071b060
获取方式就是上述代码