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);
Class objectClass5 = object_getClass(object2);
-
objectClass1 ~ objectClass5 都是NSObject的
class
对象 (类对象) -
它们是同一个对象。每个类在内存中有且只有一个class对象
-
class对象在内存存储的信息主要包括
-
isa
指针 -
superclass
指针 - 累的属性信息(@property) 、类的对象方法信息(instance method)
- 类的协议信息(protocol)、 累的成员变量信息(
ivar
)
-
meta-class (元类对象)
Class objectMetaClass = object_getClass([NSObject class]);
-
objectMetaClass是NSObject的meta-class对象
-
每个类在内存中有且只有一个meta-class对象
-
meta-class对象和class对象在内存中的结构是一样的,但是用途不一样,在内存中存储的信息主要包括
-
isa
指针 -
superclass
指针 - 类的类方法信息 (class method)
-
- 以下代码获取objectClass是class对象,并不是meta-class对象
Class objectClass = [[NSObject alloc] init] ;
- 查看Class是否为meta-class
BOOL result = class_isMetaClass([NSObject class]);
-
Class
objc
_getClass (const char *aClassName)- 传入字符串类名
- 返回对应的类对象
-
Class
object
_getClass (id obj)- 1> 传入的obj 可能是instance对象,class对象、meta-class对象
- 2>返回值
- 如果是instance对象,返回class对象
-如果是class对象,返回meta-class对象 - 如果是meta-class对象,返回NSObject(基类)的meta-class对象
-
-(Class)class、 + (Class)class
- 返回的就是类对象
-
-(Class) {
return self -> isa;
} -
+(Class) {
return self;
}
网友评论