美文网首页
iOS底层学习22 -- runtime消息转发

iOS底层学习22 -- runtime消息转发

作者: 恋空K | 来源:发表于2020-11-05 11:52 被阅读0次

    消息转发:将消息转发给别人。

    forwardingTargetForSelector:没有现实的话,默认就是返回nil
    methodSignatureForSelector:没有现实的话,默认就是返回nil
    返回nil的话,就不会来到forwardInvocation:方法了
    forwardingTargetForSelector和methodSignatureForSelector没有现实跟返回nil
    是一样的效果
    





    源码
    anInvocation.target 开始是以前的方法调用者
    经典错误
    forwardInvocation里面可以不做任何事情

    此时在用2去取参数会数组越界
    methodSignatureForSelector:(SEL)aSelector 返回什么样的方法签名,
    方法编码/函数的编码(方法参数有多少个,由方法签名决定的)方法签名决定着anIvocation
    forwardInvocation:(NSInvocation *)anNvocation 里面,anNvocation里面的方法签名就是什么
    
    anInvocation最开始包含的信息,调用了[anInvocation invokeWithTarget:[MJCat alloc] init]方法后 anInvocation.target 就变成了MJCat对象



    前提是MJCat 有这个test方法
    类方法进行消息转发的时候,不用减号开头的forwardingTargetForSelector方法
    注意图中的receiver(消息接收者)
    类方法的消息转发
    下图调用的减号开头的方法

    相关文章

      网友评论

          本文标题:iOS底层学习22 -- runtime消息转发

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