找出Objective-C类是否覆盖方法

前端之家收集整理的这篇文章主要介绍了找出Objective-C类是否覆盖方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > 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).

猜你在找的C&C++相关文章