美文网首页
动态解析、快速转发、方法签名

动态解析、快速转发、方法签名

作者: hie | 来源:发表于2018-11-16 11:27 被阅读0次

动态解析实例方法

void walk(){

    NSLog(@"%s",__func__);

}

+ (BOOL)resolveInstanceMethod:(SEL)sel{

    //方法未实现

//    if (sel == @selector(walk)) {

//        //返回c方法实现

//        return class_addMethod(self, sel, (IMP)walk, "v@:");

//    }

    //方法未实现

    if(sel ==@selector(walk)) {

        //获取方法

        Method method = class_getInstanceMethod(self,@selector(run));

        //获取方法的实现

        IMP methodIMP = method_getImplementation(method);

        //修改方法的实现

        // v:方法返回值

        //@:方法名,: :方法参数 ,a: 固定

         returnclass_addMethod(self, sel, methodIMP,"v@:");

    }

    return [super resolveInstanceMethod:sel];

}

- (void)run{

    NSLog(@"%s",__func__);

}

动态解析类方法

//类方法动态解析

+ (BOOL)resolveClassMethod:(SEL)sel{

    //jump方法未实现

    if(sel == @selector(jump)) {

        //获取类方法

        Method method = class_getClassMethod(self,@selector(talk));

        //方法实现

        IMP methodIMP = method_getImplementation(method);

        //替换方法的实现

        return class_addMethod(object_getClass(self), sel, methodIMP,"v@:");

    }

    return  [super resolveClassMethod:sel];

}

+ (void)talk{

    NSLog(@"%s",__func__);

}


方法签名

- (NSMethodSignature*)methodSignatureForSelector:(SEL)aSelector{

    //对run方法签名

    if(aSelector ==@selector(run)){

        return [NSMethodSignature signatureWithObjCTypes:"v@:"];

    }

    return [super methodSignatureForSelector:aSelector];

}

- (void)forwardInvocation:(NSInvocation*)anInvocation{

    //把消息转发给ZFDog处理

//    [anInvocation invokeWithTarget:[ZFDog new]];

    //转发自己处理

    anInvocation.selector=@selector(jump);

    [anInvocation invoke];

}

- (void)jump{

    NSLog(@"%s",__func__);

}


默认先走动态解析,如果动态解析未处理,则走快速转发;若快速转发未处理,则走方法签名

相关文章

  • 动态解析、快速转发、方法签名

    动态解析实例方法 void walk(){ NSLog(@"%s",__func__);}+ (BOOL)res...

  • Runtime

    定义 runtime 详解文章 1. 消息转发 动态方法解析(方法调用的必经之路) 快速转发(动态解析失败后,指...

  • iOS 消息转发机制

    消息转发机制分为三步: 一、动态方法解析 二、快速消息转发 三、标准消息转发(normal forwarding)...

  • iOS设计模式 (八) 代理模式消息机制

    消息机制 上图我们可以看出iOS消息机制是分三步, 动态方法解析,消息转发重定向,生成方法签名以及方法的签名派发来...

  • unrecognized selector sent to in

    消息转发以及动态解析方法 消息转发机制基本上分为三个步骤: 动态方法解析 备用接收者 完整转发 首先,对于动态方法...

  • Runtime(二)

    objc_msgSend 包括以下三个步骤 消息发送 动态方法解析 消息转发 消息发送 动态方法解析 消息转发 如...

  • Runtime 方法调用本质(消息发送、动态方法解析、消息转发)

    动态方法解析、消息转发 如果方法实现(imp)没有找到会尝试一次动态方法解析,源码如 动态方法解析调用 "_cla...

  • Runtime入门总结

    简介Runtime的基础数据结构消息发送1. 方法调用流程2. 动态方法解析3. 快速转发4. 标准转发API使用...

  • MG--iOS 消息机制

    msgSend 消息发送 动态方法解析 动态添加方法image.png 消息转发

  • 消息转发流程

    动态方法解析 备用接收者 完整消息转发

网友评论

      本文标题:动态解析、快速转发、方法签名

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