参见英文答案 >
Objective-C detect if class overrides inherited method2个
如何在运行时查找类是否覆盖其超类的方法?
如何在运行时查找类是否覆盖其超类的方法?
例如,我想知道一个类是否有自己的isEqual:或hash实现,而不是依赖于超类.
解决方法
您只需要获取方法列表,并查找所需的方法:
#import <objc/runtime.h> BOOL hasMethod(Class cls,SEL sel) { unsigned int methodCount; Method *methods = class_copyMethodList(cls,&methodCount); BOOL result = NO; for (unsigned int i = 0; i < methodCount; ++i) { if (method_getName(methods[i]) == sel) { result = YES; break; } } free(methods); return result; }
class_copyMethodList只返回直接在有问题的类上定义的方法,而不是超类,所以这应该是你的意思.
如果需要类方法,则使用class_copyMethodList(object_getClass(cls),& count).