您的位置:首页 > 其它

OC对象的内存布局

2016-05-13 10:46 253 查看
一言以蔽之,属性(包括父类)都保存在对象本身的存储空间内;本类的实例方法保存在类对象中,本类的类方法保存在元类对象中;父类的实例方法保存在各级 super class 中,父类的类方法保存在各级 super meta class 中。

下图是对象的内存布局,isa 指向其类对象,其余空间保存各级的 ivar:



下图是类对象的内存布局(详细可看 runtime.h 中对 objc_class 的定义),isa 指向其元类,super_class指向其父类,此外还包含实例变量列表、方法列表、协议列表:



ps: 实例变量的定义如下,它包含了变量的名称、类型、偏移等,但却不包括变量的值——值在对象而非类中:

struct objc_ivar {
char *ivar_name  OBJC2_UNAVAILABLE;
char *ivar_type  OBJC2_UNAVAILABLE;
int ivar_offset  OBJC2_UNAVAILABLE;
#ifdef __LP64__
int space        OBJC2_UNAVAILABLE;
#endif
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: