Instance 实例对象
- Instance对象就是通过类alloc出来的对象,每次调用alloc,都会产生新的instance对象
- alloc 方法是申请内存并创建实例对象
- init 是自定义的初始化方法,它应该一直被重写
NSObject *object1 = [[NSObject alloc] init]; // 实例对象
NSObject *object2 = [[NSObject alloc] init]; // 实例对象
// 它们3个指向的是同一个对象
NSObject *p1 = [NSObject alloc];
NSObject *p2 = p1;
NSObject *p3 = p1;
复制代码
- object1、object2 是NSObject 的实例对象
- 它们是不同的两个对象,占据不同的内存空间
- instance对象存储的信息包括:(因为isa也是一个成员变量,所以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]; // 类对象
// runtime 中的方法
Class objectClass4 = object_getClass(object1); // 类对象
Class objectClass5 = object_getClass(object2); // 类对象
复制代码
- objectClass1 – objectClass5 都是NSObject 的 class 对象(类对象)。
- 他们是同一个对象。每个类在内存中有且只有一个类对象。
- class 对象在内存中主要存储的信息有:
- isa指针
- superClass指针
- 类的属性信息(@property)
- 类的对象方法信息(instance method)
- 类的协议信息(protocol)
- 类的成员变量(ivar)
- ······
meta-Class 元类对象
Class metaClass = object_getClass([NSObject class]);
- metaClass 是NSObject 的meta-class对象(元类对象)
- 每个类在内存中有且仅有一个 meta-class 对象
- meta-class 对象和 class 对象在内存中的结构是一样的,但是用途不一样, 在内存中存储的主要信息包括:
- isa指针
- superclass指针
- 类的类方法信息(class method)
涉及到的方法
Class metaClass = object_getClass([NSObject class]);
传入的obj可能是instance对象、class对象、meta-class对象
// 返回的是对象指针指向的内容
// 传入instance对象 -> 返回class对象
// 传入class对象 -> 返回meta-class对象
// 传入meta-class对象 -> 返回 NSObject(基类)的meta-class对象
Class object_getClass(id obj)
{
if (obj) return obj->getIsa();
else return Nil;
}
复制代码
-
Class objc_getClass(const char *aClassName)
- 传入字符串类名
- 返回对应的类对象
-
-(Class)class;
: 返回的就是类对象
(Class) {
return self->isa;
}
(Class) {
return self;
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END