+ (BOOL)resolveClassMethod:(SEL)sel{
Class cls = objc_getMetaClass([NSStringFromClass(self) UTF8String]);
IMP impPoint = class_getMethodImplementation(cls, @selector(cx_clsMethod));
Method clsMethon = class_getClassMethod(cls, @selector(cx_clsMethod));
const char *encoding = method_getTypeEncoding(clsMethon);
class_addMethod(cls, sel, impPoint, encoding);
return YES;
}
+(BOOL)resolveInstanceMethod:(SEL)sel
{
//动态添加一个方法!!
/*
1.cls 哪个类
2.SEL
3.IMP
4.返回值类型!
*/
class_addMethod(self, sel, (IMP)cx_instanceMethod, "v@:@");
return [super resolveInstanceMethod:sel];
}
+(void)cx_clsMethod{
NSLog(@"动态添加一个类方法!");
}
void cx_instanceMethod(id obj,SEL sel,NSString * objc){
NSLog(@"动态添加一个对象方法!");
NSLog(@"%@--%@--%@",obj,NSStringFromSelector(sel),objc);
}
再给一个类或者对象发送消息时如果找不到对应的方法实现,则会进入上诉两个方法中,可在上诉方法中动态添加方法.网上的一些博客只给出如何添加对象方法,而没写如何添加类方法,之前的笔记丢失现在想起来就记录在博客上,希望能帮到需要用的人。