1. alloc 流程
注: objc4-750环境
由NSObject * obj = [NSObject alloc];引出
2. alloc 流程图
3.结论
- 通过对源码的阅读可以知道alloc主要的作用是为对象开辟的内存空间。
- 同时会生成一个isa
- 在通过
_class_createInstanceFromZone方法开辟内存空间,单个对象最少16字节,其中isa 8个字节,为了便于内存读取,最少16字节
size_t size = cls->instanceSize(extraBytes);
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;
}
4.calloc细节
注: objc 779-1 已经没有这种情况了 calloc源码有更新
fast_alloc 宏永远无法进去#else里面
canAllocFast ->false
calloc