美文网首页
Runtime-(四)方法缓存

Runtime-(四)方法缓存

作者: 码小六 | 来源:发表于2018-11-02 23:28 被阅读0次

方法缓存的查找流程,实际上就是按照给定的SEL,在方法缓存列表中找到对应的bucket_t中的IMP。对应的流程就是:

Xnip2018-10-24_17-17-09.png

我们通过给定的方法映射出方法在bucket_t中的位置,这个查找的方式,实际上就是哈希查找。其查找方式,就是根据给定的值,与对应的mask(cache_t中的一个成员变量)做位与操作然后计算,取得的一个值。然后在bucket_t中找到对应的IMP,返回给调用方就可以了。

在当前类中查找方法分两种情况:
  • 对于已排序好的列表,采用二分查找算法查找方法对应执行函数。
  • 对于没有排序的列表,采用一般遍历查找方法对应的执行函数。
父类逐级查找流程
Xnip2018-10-24_17-34-38.png
  1. 当前类对象先找到父类对象
  2. 判断父类对象是否为nil,如果是nil,则结束方法查找
  3. 如果父类不为nil,查找父类方法缓存,找到则返回并结束
  4. 如果未在父类缓存中找到方法,则在父类方法列表中查找,找到则返回并结束
  5. 如果父类方法列表中没有此方法,则重复到1,循环此流程

相关文章

网友评论

      本文标题:Runtime-(四)方法缓存

      本文链接:https://www.haomeiwen.com/subject/lcphxqtx.html