OC对象主要可以分为三种
- instance对象 实例对象
- class对象 类对象
- meta-class对象 元类对象
instance对象
instance对象就是通过类alloc出来的对象 每次调用alloc都会产生新的instance对象
NSObject *obj1 = [[NSObject alloc] init];
NSObject *obj2 = [[NSObject alloc] init];
obj1 obj2是NSObject的的instance
对象
它们是不同的两个对象 分别占据着两块不同的空间
instance对象在内存中存储的信息包括
- isa指针
- 其他成员变量
isa指针始终在instance对象内存的最前面
class对象
NSObject *object1 = [[NSObject alloc] init];
NSObject *object2 = [[NSObject alloc] init];
Class objectClass1 = [object1 class];
Class objectClass2 = [object2 class];
Class objectClass3 = [NSObject class];
Class objectClass4 = object_getClass(object1);
NSLog(@"%p %p %p %p"
, objectClass1, objectClass2, objectClass3, objectClass4);
一个类的类对象是唯一的 一个类的类对象在内存中只有一份
class对象在内存中存储的信息有
- isa指针
- superclass指针
- 类的属性信息 类的对象方法信息
- 类的协议信息 类的成员变量信息
meta-class对象
Class objectMetaClass = object_getClass([NSObject class]);
NSLog(@"%p", objectMetaClass);
/将类对象当作参数传入 获得元类对象
Class objectClass1 = [object1 class];
Class objectMetaClass2 = object_getClass(objectClass1);
NSLog(@"%p", objectMetaClass2);
每个类在内存中只有一个meta-class对象
meta-class对象和class对象的内存结构是一样的 但是用途不一样 在内存中存储的信息主要包括
- isa指针
- superclass指针
- 类的类方法信息