Skip to main content
  1. Objective-C/

Objc Instance

·1 分钟
OC Objc Instance
Objc - 系列文章之一
Part 5: 当前阅读

oc对象在内存中存储的东西
instanceisa, _property(value)
classisa, property, function, protocol, _property, superclass
meta-classisa, 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: 当前阅读