iOS Objective -C alloc 调用流程

347 阅读1分钟

1. alloc 流程

注: objc4-750环境

由NSObject * obj = [NSObject alloc];引出

分析此流程需要下载objc源码配置

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