美文网首页
2018-07-03

2018-07-03

作者: 听风抚琴看海 | 来源:发表于2018-07-31 14:26 被阅读18次

NSObject的内存本质

1.实例化一个NSObject对象

        (arm64位系统情况下)

NSObject *objc = [[NSObject alloc] init];

打印NSObject实例对象的成员变量objc所占用的大小

NSLog(@"class_getInstanceSize([NSObject class])----%zd",class_getInstanceSize([NSObject class]));

可以得出class_getInstanceSize([NSObject class])----8,

但是如果打印指针所指向的成员变量objc的内存大小

(malloc_size 返回的是字节的大小)

NSLog(@"%zd", malloc_size((__bridge const void *)obj));

则结果为 16,

通过看源码可以知道, class_getInstanceSize 返回的是cls这个对象

调用的是 alignedInstanceSize 方法

返回的是对齐之后的成员变量的大小

返回的是这个类的成员变量内存对齐后所占有的大小.

而在alloc 中,实际上调用的是 allocWithZone方法 ,具体的实现是

调用class_createInstance 方法 调用C语言的calloc方法,size从上面获得 当开辟的内存大小不足16字节时,变成16字节

所以,NSObject对象开辟的内存大小是CocoaFoundation框架规定的16字节,但是实际上用到的只是8字节

LLDB调试命令

相关文章

网友评论

      本文标题:2018-07-03

      本文链接:https://www.haomeiwen.com/subject/hvlduftx.html