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调试命令
网友评论