来源:枫叶无处漂泊
NSObject对象占用多少内存空间
一个NSObject对象都会分配16byte的内存空间,通过源码可以知道:
代码语言:javascript复制size_t instanceSize(size_t extraBytes) {
size_t size = alignedInstanceSize() extraBytes;
// CF requires all objects be at least 16 bytes.
if (size < 16) size = 16;
return size;
}
通过代码可以知道,苹果内存分配最小内存字节数为16 bytes.
OC对象实际使用内存空间
根据设备的cpu是64位还是32位的
- 64位的占用了 8 Bytes
- 32位的使用了 4 bytes
在64位情况下,OC实例对象成员变量所占的大小,实际上是 8 字节,下面可以通过源码来验证一下:
代码语言:javascript复制#import <malloc/malloc.h>
malloc_size((__bridge const void *)obj);
Obj-C指针所指向的内存的大小,实际上是16 字节
代码语言:javascript复制#import <Objc/Runtime>
Class_getInstanceSize([NSObject Class])
size_t class_getInstanceSize(Class cls) {
if (!cls) return 0;
return cls->alignedInstanceSize();
}
对象在分配内存空间时,会进行内存对齐,所以在iOS 中,分配内存空间都是16字节的倍数。16字节是苹果设定的内存的最小单位。