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
{
…
}