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

#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

详细解释后续补充!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容