使用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方法来实现
原文:http://www.cnblogs.com/whutDaniel/p/6401285.html