OC对象主要分为3种:
-
instance
对象(实例对象) -
class
对象 (类对象) -
meta-class
对象 (元类对象)
instance对象:
instance
对象就是通过类alloc
出来的对象,每次调用alloc
都会产生新的instance
对象
NSObject *object1 = [[NSObject alloc] init];
NSObject *object2 = [[NSObject alloc] init];
object1
和 object2
是NSObject
的instance
对象
它们是两个不同的对象,分别占据两块不同的内存。
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
都是NSObject
的class
对象
它们是同一个对象,每个类在内存中有且只有一个class
对象
class
对象在内存中存储的信息:
-
isa
指针 -
superClass
指针 - 类的属性信息(
@property
)、类的方法信息(instance method
) - 类的协议信息(
protocol
)、类的成员变量(ivar
) - 其他...
meta-class
Class objectMetaClass = object_getClass([NSObject class]); //Runtime API
objectMetaClass
是NSObject
的meta-class
对象
每个类在内存中有且只有一个meta-class
对象
meta-class
对象和class
对象内存结构是一样的,但是用途不一样,在内存中存储的信息主要有:
-
isa
指针 -
superClass
指针 - 类的类方法信息(
class method
) - 其他...
注意:
Class objectClass3 = [[NSObject class] class];
以上方式获取是类对象,不是元类对象,
BOOL result = class_isMetaClass([NSObject class]);
查看Class是否为meta-class
网友评论