美文网首页
如何避免分类覆盖宿主类的同名方法

如何避免分类覆盖宿主类的同名方法

作者: 青冥白鹿 | 来源:发表于2020-01-03 18:32 被阅读0次
#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

详细解释后续补充!

相关文章

网友评论

      本文标题:如何避免分类覆盖宿主类的同名方法

      本文链接:https://www.haomeiwen.com/subject/bghtactx.html