返回

从0到1探索iOS底层原理(3): OC对象原理大揭秘

IOS

在前面的文章中,我们探讨了alloc、对象初始化和内存对齐。接下来,我们将继续学习OC对象的基本原理。

一、Clang 和 xcrun

Clang 是一个由Apple主导编写,基于LLVM的C/C++/Objective-C编译器。它被用于Xcode中,也是许多开源项目的编译器。

xcrun 是一个命令行工具,它允许您运行Xcode中的工具。例如,您可以使用xcrun来运行Clang编译器。

二、OC对象基本原理

OC对象是一种数据结构,它存储了对象的属性和方法。OC对象可以被实例化,实例化的对象称为OC实例。

OC对象分为类对象和实例对象。类对象了OC类的属性和方法,而实例对象是OC类的具体实例。

OC对象具有以下特点:

  • OC对象是动态类型的。这意味着OC对象的类型可以在运行时改变。
  • OC对象支持消息转发。这意味着OC对象可以将消息转发给其他对象。
  • OC对象支持动态绑定。这意味着OC对象可以在运行时绑定到方法。

三、OC对象结构

OC对象是一个由三部分组成的结构:

  • isa指针: 指向OC对象的类对象的指针。
  • 属性: OC对象的属性。
  • 方法: OC对象的方法。

OC对象结构如下图所示:

+----------------+
| isa pointer |
+----------------+
|属性1 |
|属性2 |
|... |
+----------------+
|方法1 |
|方法2 |
|... |
+----------------+

四、类对象

类对象是OC类的。类对象存储了OC类的属性和方法。

类对象是OC对象的一部分,它位于OC对象的头部。

五、元类

元类是OC类的类对象。元类存储了OC类的属性和方法。

元类是OC对象的一部分,它位于OC对象的尾部。

六、ISA指针

ISA指针指向OC对象的类对象。ISA指针存储在OC对象的头部。

ISA指针的作用是确定OC对象的类型。

七、消息转发

消息转发是指OC对象将消息转发给其他对象的行为。

消息转发有两种方式:

  • 静态消息转发: 在编译时确定消息接收者。
  • 动态消息转发: 在运行时确定消息接收者。

八、动态绑定

动态绑定是指OC对象可以在运行时绑定到方法的行为。

动态绑定有两种方式:

  • 早期绑定: 在编译时确定方法的实现。
  • 晚期绑定: 在运行时确定方法的实现。

九、总结

OC对象是一种数据结构,它存储了对象的属性和方法。OC对象可以被实例化,实例化的对象称为OC实例。

OC对象分为类对象和实例对象。类对象描述了OC类的属性和方法,而实例对象是OC类的具体实例。

OC对象具有以下特点:

  • OC对象是动态类型的。
  • OC对象支持消息转发。
  • OC对象支持动态绑定。

OC对象结构如下图所示:

+----------------+
| isa pointer |
+----------------+
|属性1 |
|属性2 |
|... |
+----------------+
|方法1 |
|方法2 |
|... |
+----------------+

类对象是OC类的描述。类对象存储了OC类的属性和方法。

元类是OC类的类对象。元类存储了OC类的属性和方法。

ISA指针指向OC对象的类对象。ISA指针存储在OC对象的头部。

消息转发是指OC对象将消息转发给其他对象的行为。

动态绑定是指OC对象可以在运行时绑定到方法的行为。