Objc Instance
·1 分钟
OC
Objc Instance
目录
Objc - 系列文章之一
Part 5: 当前阅读
oc对象 | 在内存中存储的东西 |
---|---|
instance | isa, _property(value) |
class | isa, property, function, protocol, _property, superclass |
meta-class | isa, superclass, class function |
instance对象(实例对象)>
instance对象(实例对象) #
// obj1,obj2 是NSObject的instance对象(实例对象)
// 他们不同的两个对象,分别占据着两个不同的内存。
NSObject *obj1 = [[NSObject alloc] init];
NSObject *obj2 = [[NSObject alloc] init];
instance对象在内存中存储的信息包括>
instance对象在内存中存储的信息包括 #
instance |
---|
— isa指针 |
— 其他成员变量(这里指的是变量的值,比如变量age = 4,存储这个4) |
class对象(类对象)>
class对象(类对象) #
// obj1,obj2 是NSObject的instance对象(实例对象)
// 他们不同的两个对象,分别占据着两个不同的内存。
NSObject *obj1 = [[NSObject alloc] init];
NSObject *obj2 = [[NSObject alloc] init];
// objClass1 ~ objClass5 都是NSObject的class对象(类对象)
// 他们是同一个对象,每个类在内存中有且只有一个class对象
Class objClass1 = [obj1 class];
Class objClass2 = [obj2 class];
Class objClass3 = [NSObject class];
Class objClass4 = object_getClass(obj1);
Class objClass5 = object_getClass(obj2);
class对象在内存中存储的信息包括>
class对象在内存中存储的信息包括 #
class |
---|
— isa指针 |
— superclass指针 |
— 类的属性信息(@property)、类的对象方法信息(instance method) |
— 类的协议信息(protocol)、类的成员变量信息(ivar,这里主要是变量名不会发生改变的信息,变量类型) |
meta-class对象(元类对象)>
meta-class对象(元类对象) #
// objMetaClass 是NSObject的meta-class对象(元类对象)
// 每个类在内存中有且只有一个meta-class对象
Class objMetaClass = object_getClass([NSObject class]); // runtime api
meta-class对象和class对象的内存结构是一样的,只是用途不一样>
meta-class对象和class对象的内存结构是一样的,只是用途不一样 #
meta-class |
---|
— isa指针 |
— superclass指针 |
— 类的类方法信息(class method) |
— … |
注意>
注意 #
//objectClass是class对象,并不是meta-class对象
Class objClass = [[NSObject class] class];
// 查看Class是否是meta-class
#import <objc/runtime.h>
BOOL result = class_isMetaClass([NSObject class]);
isa指针
Objc - 系列文章之一
Part 5: 当前阅读