我有类似这样的课程
@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.
答案 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。