Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何在目标C中检查类级方法是在超类中还是在子类中?_Objective C - Fatal编程技术网

Objective c 如何在目标C中检查类级方法是在超类中还是在子类中?

Objective c 如何在目标C中检查类级方法是在超类中还是在子类中?,objective-c,Objective C,我有这样的班级结构 @interface SuperClass: NSObject + (void) someName; @end @interface MyClass: SuperClass @end 在这种情况下,我只想在someName是MyClass的类方法而不是MyClass的超类时调用它。因为[[MyClass class]响应选择器:@selectorsomeName]如果类或其超级响应选择器,则返回YES。如何判断MyClass不包含tosomeName 在我的应用程序中

我有这样的班级结构

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


@interface MyClass: SuperClass

@end
在这种情况下,我只想在someName是MyClass的类方法而不是MyClass的超类时调用它。因为[[MyClass class]响应选择器:@selectorsomeName]如果类或其超级响应选择器,则返回YES。如何判断MyClass不包含tosomeName

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

以abve类结构为例,我想打印如下内容:

somenameFromSuper.somenameFromClass.someNameFromeSubClass.
如果一个类没有实现someName方法,我想将其替换为`notavailable,例如:

somenameFromSuper.notavailable.someNameFromeSubClass.
输入Safari

编辑:使其成为一种功能。还在用Safari打字

输入Safari


编辑:使其成为一种功能。还是用Safari输入。

我不明白你的问题。你不需要否定这个测试吗?我更新了这个问题,希望它有意义。你为什么不检查一下self是否是MyClass,也就是说[[self class]是否是Kindof class:[MyClass class]]这是假设我也正确理解了这个问题。我不知道类名。就像我更新中的例子,我不明白你的问题。你不需要否定这个测试吗?我更新了这个问题,希望它有意义。你为什么不检查一下self是否是MyClass,也就是说[[self class]是否是Kindof class:[MyClass class]]这是假设我也正确理解了这个问题。我不知道类名。就像我更新中的例子一样。实例方法呢?它是否适用于实例方法?只需省略classToTest=object\u GetClassToTest;。长话短说:向类请求实例方法。要获得示例中的类方法,请询问该类的class元类。这就是声明所做的。你有内存泄漏。别忘了调用freemethods;Thx,这就是我为什么不使用return的原因……那么实例方法呢?它是否适用于实例方法?只需省略classToTest=object\u GetClassToTest;。长话短说:向类请求实例方法。要获得示例中的类方法,请询问该类的class元类。这就是声明所做的。你有内存泄漏。别忘了调用freemethods;Thx,这就是为什么我没有使用return…
_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
{
    …
}