如何检查类级方法是否在Objective C中的超类或子类中?

时间:2014-08-29 07:12:04

标签: objective-c

我有类似这样的课程

@interface SuperClass: NSObject
+ (void) someName;
@end


@interface MyClass: SuperClass

@end

如果是someName而不是MyClass的超类的类方法,我只想调用MyClass。因为[[MyClass class] respondsToSelector:@selector(someName)]返回YES,如果一个类或它对选择器的超级响应。如何判断MyClass 包含someName

在我的应用程序中,我想从类方法打印包含字符串返回链的字符串。

以abve类结构为例,我想打印类似的东西:

somenameFromSuper.somenameFromClass.someNameFromeSubClass.

如果一个类没有实现someName方法,我想用`notavailable替换它,例如:

somenameFromSuper.notavailable.someNameFromeSubClass.

1 个答案:

答案 0 :(得分:4)

_Bool class_implementsMethodForSelector( Class cls, SEL selector )
{

    unsigned methodsCount;
    Method* methods = class_copyMethodList(cls, &methodsCount);
    for (unsigned methodIndex=0; methodIndex<methodsCount; methodIndex++)
    {
        if (method_getName(methods[methodIndex]) == selector)
        {
            break;
        }
    }

    free(methods);
    return  methodsIndex<methodsCount;
}

…

Class classToTest = …;
classToTest = object_getClass(classToTest); // For checking class methods
if (class_implementsMethodForSelector(classToTest, @selector(someName))
{
    …
}
else
{
    …
}

输入Safari。

编辑:制作它的功能。仍然输入Safari。