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方法 ,具体的实现是




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

网友评论