Objective-C实例对象除isa指针外还存储哪些信息?
解答
Objective-C的实例对象除isa指针外,存储的内容分两种场景:
普通实例对象(非Tagged Pointer类型)
仅存储所有成员变量(ivar)的具体值:
- 包含当前类自定义的、以及从父类继承来的所有成员变量的值,按编译期确定的内存布局顺序,紧接在isa指针之后存储
- 举个例子:如果有一个继承自
NSObject的Person类,声明了int _age、NSString *_name两个成员变量,64位架构下该类实例的内存布局为:前8字节是isa指针,接下来4字节存储_age的整数值,后续8字节存储_name指向的字符串对象的指针地址
注意:引用计数超过nonpointer isa存储上限时的额外引用计数、关联对象数据都存储在全局的SideTable哈希表中,不会占用实例本身的内存空间
Tagged Pointer类型实例
这类对象没有单独开辟堆内存,包括类型标识、数值/字符串内容、长度在内的所有信息,全部直接编码在指针地址本身中,没有额外的存储内容。
内容的提问来源于stack exchange,提问作者anb
相关产品推荐
相关产品推荐

