2018-07-03

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调试命令

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容