使用runtime动态添加方法

使用runtime动态添加方法首先需要了解两个方法

 

// 当一个累调用未实现的方法,会调用这个方法处理,并且会把对应的方法列表传过来.

+(BOOL)resolveClassMethod:(SEL)sel


// 当一个对象调用未实现的方法,会调用这个方法处理,并且会把对应的方法列表传过来.

+ (BOOL)resolveInstanceMethod:(SEL)sel{
    if (sel == @selector(test)) {
        // 动态添加test方法
        // 第一个参数:给哪个类添加方法
        // 第二个参数:添加方法的方法编号
        // 第三个参数:添加方法的函数实现(函数地址)
        // 第四个参数:函数的类型,(返回值+参数类型) v:void @:对象->self :表示SEL->_cmd
        class_addMethod(self, @selector(hehe), hehe, "v@:");
    }

    return [super resolveInstanceMethod:sel];

}


// 每个函数默认方法都有两个隐式参数,
void hehe(id self,SEL sel)
{
    NSLog(@"%@ %@",self,NSStringFromSelector(sel));
}

在相应的类里实现resolveInstanceMethod方法如果test方法没有实现,我们就可以动态添加hehe方法来实现

posted on 2017-02-15 14:25  wangdan_whut  阅读(108)  评论(0编辑  收藏  举报