从0到1探索iOS底层原理(3): OC对象原理大揭秘
2023-12-29 02:09:56
在前面的文章中,我们探讨了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对象可以在运行时绑定到方法的行为。