美文网首页
Runtime补救措施

Runtime补救措施

作者: 码痞 | 来源:发表于2016-03-03 14:39 被阅读51次

    原文地址 :Runtime那些事儿(消息机制)

    8BE1EC9D-9512-45DA-9E76-41A905C8731B.png

    总结:当找不到对应的IML方法时,RunTime会尝试通过用户设定的三种方法之一补救

    补救一:更换/添加方法
    + (BOOL)resolveInstanceMethod:(SEL)sel
    

    其中如果添加了函数实现则返回YES;


    + (BOOL)resolveInstanceMethod:(SEL)sel{

    if (sel == @selector(doNothing)) {
        
        NSLog(@"add Method");
        class_addMethod([self class], sel, (IMP)doSomething, "v@:");
    }
    return [super resolveInstanceMethod:sel];
    }
    
    void doSomething(id self,SEL _cmd){
        NSLog(@"doSomething");
    }
    
    • 关于
      OBJC_EXPORT BOOL class_addMethod(Class cls, SEL name, IMP imp, const char *types)

    参数说明:
    cls: 类
    SEL: 方法名
    IMP:函数实现
    types:函数格式,"v@:",其中v就是void,带表返回类型就是空,@代表参数,这里指的是id(self),这里:指的是方法SEL(_cmd)

    补救二:更换执行对象
    - (id)forwardingTargetForSelector:(SEL)aSelector
    

    例:由SecondViewController来执行这个方法

    - (id)forwardingTargetForSelector:(SEL)aSelector{
    
        return [[SecondViewController alloc] init];
    }
    

    相关文章

      网友评论

          本文标题:Runtime补救措施

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