美文网首页
OC中消息传递的过程及消息转发流程

OC中消息传递的过程及消息转发流程

作者: 没八阿哥的程序 | 来源:发表于2018-10-29 17:16 被阅读4次
    消息传递的大致流程
    1. 会先从缓存中查找,采用的是哈希查找,若缓存命中,执行对应函数,若未命中,则从当前类方法列表中查找;
    2. 从当前类方法列表中查找,(对于已排序好的列表,采用二分查找算法查找方法对应执行函数;对于没有排序的列表,采用一般遍历查找方法对应执行函数),若当前类方法列表命中,则执行,若未命中,则从父类方法列表中查找;
    3. 从父类方法列表中查找,也是先查找缓存中,再查找当前类,若找到,则执行,若一直未找到,则走消息转发流程

    缓存中查找

    是根据对应的key进行哈希查找 ,通过哈希算法计算出IMP所在位置

    当前类中查找

    • 对于已排序好的列表,采用二分查找算法查找方法对应执行函数
    • 对于没有排序的列表,采用一般遍历查找方法对应执行函数

    父类逐级查找

    父类逐级查找流程

    消息转发

    消息转发流程
    • 动态方法解析(resolveInstanceMethod)
    • 快速转发(forwardingTargetForSelector)
    • 慢速转发(methodSignatureForSelector -> forwardInvocation)

    相关文章

      网友评论

          本文标题:OC中消息传递的过程及消息转发流程

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