一个NSObject对象占用多少内存
- 一个NSObject占用了16个字节
- 但是只使用了8个字节也就是 isa的大小 因为 isa是一个指针在oc 64位环境下 一个指针占用8个字节
- 以为在ios中分配内存空间都是16的倍数 所以系统给了16个字节
查看方法
- 查看使用多少的方法
#import <Objc/Runtime.h> class_getInstanceSize([NSObject Class]) // 源码 size_t class_getInstanceSize(Class cls) { if (!cls) return 0; return cls->alignedInstanceSize(); } - 查看分配内存的方法
#import <malloc/maslloc.h> NSObject *obj = [NSObject alloc] init]; malloc_size((__bridge const void *)obj);
通过查看源码证实
我们可以在openSource.apple.com 上下载最新的开源 源码 然后找到allocWithZone 通过这个方法的实现去证实以上结论
// 我们可以看到allocWithZone的实现就是
id
_objc_rootAllocWithZone(Class cls, malloc_zone_t *zone)
{
id obj;
#if __OBJC2__
// allocWithZone under __OBJC2__ ignores the zone parameter
(void)zone;
//再看这里的实现
obj = class_createInstance(cls, 0);
#else
if (!zone) {
obj = class_createInstance(cls, 0);
}
else {
obj = class_createInstanceFromZone(cls, 0, zone);
}
#endif
if (slowpath(!obj)) obj = callBadAllocHandler(cls);
return obj;
}
id
class_createInstance(Class cls, size_t extraBytes)
{
// 继续往下找
return _class_createInstanceFromZone(cls, extraBytes, nil);
}
// 重点是在_class_createInstanceFromZone 这个方法里
以上就是证明了