美文网首页
运行时消息转发

运行时消息转发

作者: 一笔春秋 | 来源:发表于2019-12-07 04:57 被阅读0次

原理

流程图

301129-a1159ef51f453da8.png

代码实现

进行一次发送消息会在相关的类对象中搜索方法列表,如果找不到则会沿着继承树一直搜索直到继承树的根部(通常为NSObject),如果还是找不到并且消息转发都失败了就会执行doesNotRecognizeSelector:方法报 unrecongnized selector

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //执行foo函数
    [self performSelector:@selector(test)];
}

+ (BOOL)resolveInstanceMethod:(SEL)sel {
    return YES;//返回YES,进入下一步转发
}

- (id)forwardingTargetForSelector:(SEL)aSelector {
    return nil;//返回nil,进入下一步转发
}

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector {
    if ([NSStringFromSelector(aSelector) isEqualToString:@"test"]) {
        return [NSMethodSignature signatureWithObjCTypes:"v@:"];
    }
    
    return [super methodSignatureForSelector:aSelector];
}

- (void)forwardInvocation:(NSInvocation *)anInvocation {
    SEL sel = anInvocation.selector;

    Person *p = [Person new];
    if([p respondsToSelector:sel]) {
        [anInvocation invokeWithTarget:p];
    }
    else {
        [self doesNotRecognizeSelector:sel];
    }

}

@end

Runtime常见的应用场景

相关文章

  • 运行时消息转发

    原理 流程图 代码实现 进行一次发送消息会在相关的类对象中搜索方法列表,如果找不到则会沿着继承树一直搜索直到继承树...

  • iOS消息转发机制

    消息转发机制: 消息转发机制是相对于消息传递机制而言的。 1、消息(传递)机制 RunTime简称运行时。就是系统...

  • 运行时

    运行时 调用 消息转发 通过 obj_msgSend 调用,在找不到imp的时候,就会进入消息转发流程 调用 + ...

  • iOS运行时消息转发

    iOS开发过程中,有一类的错误会经常遇到,就是找不到所调用的方法,当然这类问题比较好解决,给当前对象或其父类对象添...

  • 消息发送机制&消息转发机制

    消息发送机制&消息转发机制 消息发送机制:使用了运行时的方式, 通过SEL快速查找IMP的过程. 消息转发机制:I...

  • Objective-C 运行时(Runtime)解析

    Objective-C基于C语言加入了面向对象特性和消息转发,Objective-C 的消息转发需要运行时系统来动...

  • iOS中的消息转发机制

    OC由于运行时特性,可以在运行期间动态添加方法,这个寻找动态添加的方法的过程就是动态消息转发。iOS的消息转发机制...

  • 消息转发机制

    OC由于运行时特性,可以在运行期间动态添加方法,这个寻找动态添加的方法的过程就是动态消息转发。 iOS的消息转发机...

  • Runtime运行时之消息转发

    消息转发 Person *person = [[Person alloc]init];[person perfor...

  • 常用的框架整理(持续更新)

    运行时消息转发机制 https://github.com/hong4cong/_objc_msgForward_d...

网友评论

      本文标题:运行时消息转发

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