runtime 相关的

用runtime为类添加方法

2017-08-19  本文已影响6人  5a9c6f44e578

用runtime动态的为类添加方法
先在model.m

//     void的前面没有+、-号,因为只是C的代码       必须有两个指定参数(id self,SEL _cmd)
void dynamicAdd(id self, SEL _cmd) {
    
    NSLog(@"动态添加");
}

+ (BOOL)resolveInstanceMethod:(SEL)sel;{
    
    // 动态加载实例方法
    if (sel == NSSelectorFromString(@"dynamicAdd")) {
        
        //    第一空 给哪个类添加方法
        //    第二空 添加类方法
        //    第三空  方法实现,函数名 guessAnswer 意思是guessAnswer的地址指针  注意:这里需要强转成IMP类型
        //    第四空  方法类型 "v@:" 意思是,v代表无返回值void,如果是i则代表int;@代表 id sel; : 代表 SEL _cmd
        class_addMethod(self, sel, (IMP)dynamicAdd, "v@:");
        return YES;
    }
    // 先恢复, 不然会覆盖系统的方法
    return [super resolveInstanceMethod:sel];
}

然后在相应的页面添加方法


    //  model 初始化
   self.object = [object new];
    //    performSelector是运行时系统负责去找方法的,在编译时候不做任何校验;如果直接调用编译是会自动校验
    //    即方法编译时不存在,但是运行时候存在,这时候必然需要使用performSelector去调用
    [self.object performSelector:@selector(dynamicAdd)];
上一篇 下一篇

猜你喜欢

热点阅读