返回
OC底层alloc流程探秘:揭开实例对象创建的奥秘
IOS
2023-10-04 15:21:05
OC底层之alloc流程探索
通过[[XXXX alloc] init]
创建实例对象是我们再熟悉不过的代码了。今天,我们将深入探索alloc
方法的底层原理,揭开实例对象创建过程的神秘面纱。
alloc的底层原理
当我们调用[[XXXX alloc] init]
时,实际上发生了以下一系列步骤:
-
分配内存:
- 系统调用
malloc
函数为新对象分配内存。 - 分配的内存大小等于对象的实例大小(由编译器确定)。
- 系统调用
-
初始化对象:
- 调用对象的
init
方法(如果没有显式重写init
,则调用默认的init
)。 init
方法负责初始化对象的实例变量。
- 调用对象的
-
返回指针:
alloc
方法返回一个指向新对象的指针。
图解alloc流程:
+----------+
| |
| |
+---------->| Object |
| | |
| +----------+
\ ^
\ |
\ malloc() |
\ |
\ +------+ |
------->| alloc |
^ |
| |
| init() |
| |
+------+ |
^
|
v
+----------+
| |
| |
| |
| |
+----------+
示例代码:
// 创建一个Person对象
Person *person = [[Person alloc] init];
// 给person的name属性赋值
person.name = @"John";
// 输出person的name属性
NSLog(@"%@", person.name);
注意事项:
alloc
方法仅分配内存,不负责对象的初始化。- 对象的初始化是由
init
方法完成的。 alloc
方法返回的是一个指向未初始化对象的指针,因此在使用对象之前必须先调用init
方法。
总结:
通过深入了解alloc
方法的底层原理,我们对OC内存管理的理解又迈进了一步。掌握这些底层机制对于编写高效、可靠的Objective-C代码至关重要。