#import @interface MisImp : NSObject - (void)foo; + (void)fooMethod; @end #import "MisImp.h" #import void dynamicMethodIMP(id self, SEL _cmd) { NSLog(@"😄 dynamicMethodIMP"); } void classDynamicMethodIMP(id self, SEL _cmd) { NSLog(@"😄 classDynamicMethodIMP"); } @implementation MisImp + (BOOL)resolveInstanceMethod:(SEL)sel { if (sel == @selector(foo)) { class_addMethod([self class], sel, (IMP)dynamicMethodIMP, "v@:"); return YES; } return [super resolveInstanceMethod:sel]; } + (BOOL)resolveClassMethod:(SEL)sel{ Class metaClass = objc_getMetaClass(class_getName(self)); if (sel == @selector(fooMethod)) { class_addMethod(metaClass, sel, (IMP)classDynamicMethodIMP, "v@:"); return YES; } return [super resolveClassMethod:sel]; } @end