返回

剖析 iOS 对象的 alloc 流程,领略底层奥秘

IOS

alloc 与 init 的底层奥秘

iOS 对象的创建离不开 alloc 和 init 这两个方法。alloc 负责分配内存,init 负责初始化对象。下面我们来详细看看这两个方法在底层是如何运作的。

alloc:内存分配的魔法师

alloc 方法的作用是为对象分配内存空间。当我们调用 Person *p = [[Person alloc] init]; 时,alloc 方法首先会向操作系统请求一块足够大的内存空间来存储 Person 对象。如果操作系统批准了这个请求,alloc 方法就会返回这块内存空间的地址。这个地址就是我们所说的对象的指针。

init:对象的初始化者

init 方法的作用是初始化对象。当我们调用 p = [[Person alloc] init]; 时,init 方法就会被自动调用。init 方法会对对象的实例变量进行初始化,并执行一些其他必要的操作,比如注册事件监听器或加载资源。

消息发送:对象交互的桥梁

在 iOS 中,对象之间的交互是通过消息发送来实现的。当我们调用对象的方法时,实际上是在向对象发送一条消息。消息包含了要调用的方法名和参数。对象收到消息后,会根据消息的内容执行相应的操作。

消息发送的过程可以分为以下几个步骤:

  1. 编译器将方法调用编译成一条消息发送指令。
  2. 运行时系统根据消息发送指令找到要调用的方法。
  3. 运行时系统将消息发送给对象。
  4. 对象执行消息中的方法。

实例变量:对象的属性

实例变量是对象的状态信息。每个对象都有自己的实例变量。实例变量可以是基本数据类型,也可以是对象指针。实例变量的值可以在对象的生命周期内发生改变。

实例变量的声明语法如下:

@interface Person : NSObject {
  NSString *_name;
  int _age;
}

在这个例子中,Person 类有两个实例变量:_name 和 _age。_name 是一个字符串,_age 是一个整数。

类方法:对象的工厂方法

类方法是属于类本身的方法,而不是属于类的实例。类方法通常用于创建对象或获取类的信息。类方法的声明语法如下:

+ (void)sayHello;

在这个例子中,Person 类有一个类方法 sayHello。sayHello 方法可以输出 "Hello, world!"。

结语

通过本文,我们对 iOS 对象的创建过程有了一个深入的了解。我们学习了 alloc 和 init 方法的底层原理,消息发送的机制,实例变量的用法,以及类方法的概念。这些知识将帮助我们更好地理解 iOS 开发中的对象相关概念。