美文网首页
2019-02-19 OCMethodTrace原理

2019-02-19 OCMethodTrace原理

作者: 我是小胡胡分胡 | 来源:发表于2019-02-19 19:51 被阅读0次

    OCMethodTrace原理
    增加一个全新方法,名为_OMTMessageTemp开头, 然后将原有方法进行hook
    整体流程就是
    1、 给类,增加1个新的方法, 例如__OMTMessageFinal_Animal->setName:age:, 并且绑定到旧方法的函数地址;
    把旧方法绑定到一个并不存在的方法method实现上, __OMTMessageTemp_Animal->setName:age: 使其去转发;

             2、 类通过NSObject分类定义的消息转发,本类找不到方法( __OMTMessageTemp_Animal->setName:age:)会走对象转发,转发给messageStub 1次转发
             
             
             3、 messageStub仍然找不到方法, 转发给NSInvocation 1次转发,最终入口仍然在OCMethodTrace类, 将找不到的方法名字 __OMTMessageTemp_Animal->setName:age:) 改为 __OMTMessageFinal_Animal->setName:age:,  而final_class方法在第一部中已经被绑定到原方法对应到的函数地址上. 调用他, 就是回调原方法.
    

    消息转发
    本类及父类中都找不到的方法,就会进入以下流程:
    消息转发
    1、resolveXXX
    2、forwardingTargetForSelector
    3、methodSignatureForSelector、forwardInvocation
    4、doesNotRecognizeSelector

    相关文章

      网友评论

          本文标题:2019-02-19 OCMethodTrace原理

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