#import <Foundation/Foundation.h>
@interface NSObject (Utilities)
+ (void)overrideCategorySelector:(SEL)sel isMeta:(BOOL)isMeta;
@end
#import "NSObject+Utilities.h"
#import <objc/runtime.h>
@implementation NSObject (Utilities)
+ (void)overrideCategorySelector:(SEL)sel isMeta:(BOOL)isMeta{
unsigned int count;
Class cClass = [self class];
if (isMeta) {
cClass = objc_getMetaClass(class_getName([self class]));
}
Method *list = class_copyMethodList(cClass, &count);
while (count > 0) {
unsigned int i = --count;
Method m = list[i];
if (method_getName(m) == sel) {
IMP imp = method_getImplementation(m);
method_setImplementation(class_getInstanceMethod(cClass, sel), imp);
break;
}
}
free(list);
}
@end
详细解释后续补充!
网友评论