Objective-C 内存模型

前篇

在Objective-C有说到Objective-C的消息机制。
Objective-C的内存模型时怎样的一个模型呢?

Objective-C 对象

@interface NSObject {
Class isa OBJC_ISA_AVAILABILITY;
}

在定义一个类的时候,其成员变量如上,发现它实际是一个Class。而Class的本质是一个结构体,如下:

struct objc_class : objc_object {
// Class ISA;
Class superclass;
cache_t cache; // formerly cache pointer and vtable
class_data_bits_t bits; // class_rw_t * plus custom rr/alloc flags



}

从上面可以看到,Class实际是继承自object,那么OC里面的类从这里来讲它应该也是一个对象

再次追溯objc_object对象的定义:

struct objc_object {
private:
isa_t isa;
public:
Class ISA();
Class getIsa();
void initIsa(Class cls /nonpointer=false/);
void initClassIsa(Class cls /nonpointer=maybe/);
void initProtocolIsa(Class cls/nonpointer=maybe/);
void initInstanceIsa(Class cls, bool hasCxxDtor);
Class changeIsa(Class newCls);

…};

显而易见,OC里面的类实际是一个结构体。

模型

内存模型

如上所示,OC中出现了元类的概念,同时元类是指向自己的。

对象的模型,isa 指针指向其类,其余空间保存各级的属性(ivar):

对象模型

参考

C/C++/OC内存模型总结 参考