返回

探究 alloc 源码及其调用顺序

IOS

引言:对象创建与内存管理

在 Objective-C 中,对象是程序的基本组成单元,程序通过创建对象来操作数据和实现功能。对象创建涉及到内存分配和初始化两个步骤。内存分配为对象分配必要的存储空间,而初始化则对对象的成员变量进行赋值。

alloc:内存分配的基石

alloc 方法是 Objective-C 中用于分配内存的方法。它接收一个类对象作为参数,并返回一个指向该类新创建对象的指针。alloc 方法的实现细节隐藏在 Objective-C 运行时库中,但我们可以通过分析其源码来一探究竟。

alloc 源码分析

alloc 方法的源码位于 Objective-C 运行时库中,具体位置可能因系统版本而异。在 macOS 系统中,我们可以通过以下命令找到 alloc 的源码:

find /usr/lib/ -name alloc.s

alloc 源码的主要内容如下:

.text
.align 2
.globl _objc_msgSend
_objc_msgSend:
    pushq   %r12
    pushq   %r13
    pushq   %r14
    pushq   %r15
    movq    %rsi, %r12
    movq    %rdi, %r13
    movq    %rdx, %r14
    movq    %rcx, %r15
    callq   objc_msgSend_stret
    popq    %r15
    popq    %r14
    popq    %r13
    popq    %r12
    retq

alloc 的调用顺序

alloc 方法的调用顺序如下:

  1. 调用方通过消息发送机制向对象发送 alloc 消息。
  2. Objective-C 运行时库接收到 alloc 消息后,首先查找该类的元类。
  3. 运行时库调用元类的 alloc 方法。
  4. 元类的 alloc 方法分配内存并返回指向新对象的指针。

内存管理策略对 alloc 的影响

在 Objective-C 中,内存管理策略分为两种:手动引用计数 (MRC) 和自动引用计数 (ARC)。MRC 由程序员负责管理对象的内存,而 ARC 由编译器和运行时库自动管理对象的内存。

在 MRC 下,alloc 方法返回的对象需要通过 release 方法释放内存。而在 ARC 下,alloc 方法返回的对象不需要手动释放内存,编译器和运行时库会自动管理对象的内存。

结论

alloc 方法是 Objective-C 中用于分配内存的方法,它是对象创建过程中的第一步。通过分析 alloc 源码,我们可以了解到其内部实现细节和调用顺序。同时,我们也探讨了内存管理策略(MRC 和 ARC)对 alloc 的影响。通过对 alloc 源码的分析,我们对 Objective-C 对象创建过程和内存管理机制有更深入的理解。