美文网首页
二十六、Runtime之(十)方法-objc_msgSend()

二十六、Runtime之(十)方法-objc_msgSend()

作者: yqc5521 | 来源:发表于2019-05-09 13:03 被阅读0次

    一、消息转发

    1.动态解析阶段,并没有添加方法,当再次retry时,仍找不到方法,这个时候,就不会走动态方法解析,而是走消息转发阶段

    objc_msgForward_impcache
    2.执行forwarding方法,内部会调动forwardingTargetForSelector方法,通过获取返回值,调用msgSend方法,执行被转发对象的方法。
    __forwarding__
    3.消息转发的代码实现
    消息转发的代码实现

    二、方法签名

    1.如果不实现forwardingTargetForSelector,或者实现forwardingTargetForSelector,返回值为nil,则会走methodSignatureForSelector方法。


    forwardingTargetForSelector

    2.方法签名的代码实现


    方法签名的代码实现

    3.NSInvocation


    NSInvocation

    objc_msgSend()执行流程03-消息转发的流程示意图

    objc_msgSend()执行流程03-消息转发

    相关文章

      网友评论

          本文标题:二十六、Runtime之(十)方法-objc_msgSend()

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