cachet 是 Objective-C Runtime 中非常核心的一个结构体,用于方法缓存。它的主要目的是为了优化方法调用的性能。 在 Objective-C 中,方法调用本质上是消息发送()。如果没有缓存,每次调用方法都需要去类的方法列表()中遍历查找,甚至需要沿着继承链向上查找,效率非常低。 的存在就是为了将“查找过的方法”保存起来,下次调用时直接从缓存取,将时间复杂度从 O(n) 降低到 O(1)。 以下是关于 缓存机制的详细解析: --- 1. 底层数据结构 定义在 中,它本质上是一个哈希表(Hash Table/散列表)。 核心结构体定义 (简化版) 桶元素 数组中存放的是 结构体,它存储了具体的缓存内容: Key: (方法名) Value: (函数指针,指向代码实现) --- 2. 缓存查找流程 (读操作) 当你调用 时, 的汇编代码会优先执行以下步骤: 1. 获取类对象:通过 找到类对象。 2. 计算哈希下标:利用 和 进行位运算(通常是 ),计算出该方法在 数组中的初始下标。 3. 哈希查找: 检查该下标处的 。 如果 等于当前调用的 ,命中缓存 (Cache...