返回

揭秘 iOS 对象 alloc 的底层机制

IOS

iOS 对象 alloc 探究

前言

在 iOS 开发中,对象分配是一个基本且至关重要的概念。alloc 函数是创建一个新对象的核心方法,它负责分配内存空间并将其与类关联。深入了解 alloc 的工作原理对于理解 iOS 内存管理至关重要。本文将深入探讨 alloc 的底层机制,揭示它如何分配内存、确定内存大小以及将内存与类相关联。

alloc 函数的概述

alloc 函数是 Objective-C 中的一个类方法,用于创建一个新对象。它接收一个类对象作为参数并返回一个指向该类新实例的指针。该函数在 Objective-C 运行时库中实现,负责协调内存分配和对象初始化。

内存分配

当 alloc 被调用时,它首先调用 malloc() 函数来分配一段内存。malloc() 返回一个指向分配内存块开始处的指针。分配的内存大小由类的实例大小决定。实例大小由编译器在编译时确定,并且可以在类的头文件中找到。

内存大小的确定

类的实例大小是其所有实例变量、成员函数和方法实现大小的总和。Objective-C 运行时使用名为 class_getInstanceSize() 的函数来确定类的实例大小。

与类的关联

一旦分配了内存,alloc 就会将它与类相关联。它是通过设置对象的 isa 指针来实现的。isa 指针指向对象的类对象,它包含有关对象的类信息,例如其方法实现和实例变量布局。

底层函数调用流程

以下是 alloc 函数底层的函数调用流程:

  1. alloc 调用 malloc() 分配一段内存。
  2. alloc 调用 class_getInstanceSize() 确定类的实例大小。
  3. alloc 将对象的 isa 指针设置为类的类对象。
  4. alloc 返回指向新创建对象的指针。

示例

考虑以下类:

@interface Person : NSObject

@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) NSInteger age;

@end

此类的实例大小为 24 字节,包括 8 字节的 isa 指针、8 字节的 name 指针和 8 字节的 age 整数。

当 Person 的 alloc 函数被调用时,它将分配 24 字节的内存并将其与 Person 类关联。新创建对象的 isa 指针将指向 Person 的类对象。

结论

alloc 函数是 iOS 中对象分配的关键组成部分。它负责分配内存、确定内存大小并与类关联内存。通过深入了解 alloc 的底层机制,开发人员可以更好地理解 iOS 内存管理并编写更有效率的代码。