返回
剖析 iOS 底层:Runtime 中的神秘 objc_msgSend——深入探秘查找流程(上)
IOS
2024-02-07 11:29:33
今天,我们将开启一段激动人心的探索之旅,深入 iOS 底层,揭秘 Runtime 中神秘的 objc_msgSend,并着重关注其在查找流程中的应用。
objc_msgSend:Runtime 的核心
objc_msgSend 是 Objective-C 运行时的核心函数,它负责将消息发送给对象。消息包含一个选择器,即要调用的方法,以及一个或多个参数。objc_msgSend 解析选择器,查找相应的方法实现,然后调用它。
查找流程
查找流程是 objc_msgSend 的关键部分。它涉及查找与给定选择器匹配的方法实现。查找流程涉及以下步骤:
- 缓存查找: 首先,objc_msgSend 会检查缓存以查找先前找到的方法实现。如果找到,它将直接调用该实现。
- 类方法查找: 如果缓存查找失败,objc_msgSend 将搜索类的类方法列表。如果找到匹配的方法,它将调用该方法。
- 实例方法查找: 如果没有找到类方法,objc_msgSend 将搜索类的实例方法列表。如果找到匹配的方法,它将调用该方法。
- 父类查找: 如果在当前类中找不到匹配的方法,objc_msgSend 将继续搜索父类,直到找到方法或到达根类。
- 动态方法查找: 如果在父类中找不到匹配的方法,objc_msgSend 将尝试使用动态方法解析来查找实现。
真实案例:真机探索 objc_msgSend
为了更好地理解 objc_msgSend 的查找流程,让我们在真机上探索一个实际示例。我们将使用 Instruments 工具来跟踪 objc_msgSend 调用并分析其行为。
- 打开 Instruments 工具并附加到真机上运行的应用程序。
- 选择“Time Profiler”仪器并开始录制。
- 在应用程序中触发一条消息发送,例如按钮点击。
- 停止录制并检查 Time Profiler 数据。
在 Time Profiler 数据中,您将看到 objc_msgSend 调用以及它所采取的查找步骤。这将让您深入了解 objc_msgSend 在查找流程中的实际行为。
结论
objc_msgSend 是 iOS Runtime 的核心函数,对于理解消息传递机制至关重要。通过剖析查找流程,我们可以更深入地了解 objc_msgSend 的工作原理,并欣赏其在 iOS 底层中的关键作用。
继续关注下篇,我们将进一步探索 objc_msgSend 在消息发送中的高级概念,例如方法签名、消息转发和异常处理。