OC对象的分类

OC对象主要分为3种:

  • instance对象(实例对象)
  • class对象 (类对象)
  • meta-class对象 (元类对象)

instance对象:

instance对象就是通过类alloc出来的对象,每次调用alloc都会产生新的instance对象

 NSObject *object1 = [[NSObject alloc] init];
 NSObject *object2 = [[NSObject alloc] init];

object1object2NSObjectinstance对象
它们是两个不同的对象,分别占据两块不同的内存。

instance对象在内存中存储的信息

  • isa指针
  • 其他成员变量

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); //Runtime API
 Class objectClass5 = object_getClass(object2); //Runtime API

其中 objectClass1 ~ objectClass5都是NSObjectclass对象
它们是同一个对象,每个类在内存中有且只有一个class对象

class对象在内存中存储的信息

  • isa指针
  • superClass指针
  • 类的属性信息(@property)、类的方法信息(instance method
  • 类的协议信息(protocol)、类的成员变量(ivar
  • 其他...

meta-class

Class objectMetaClass = object_getClass([NSObject class]); //Runtime API

objectMetaClassNSObjectmeta-class对象
每个类在内存中有且只有一个meta-class对象

meta-class对象和class对象内存结构是一样的,但是用途不一样,在内存中存储的信息主要有:

  • isa指针
  • superClass指针
  • 类的类方法信息(class method
  • 其他...

注意:

Class objectClass3 = [[NSObject class] class];

以上方式获取是类对象,不是元类对象,

BOOL result = class_isMetaClass([NSObject class]);

查看Class是否为meta-class

你可能感兴趣的:(OC对象的分类)