检查类是否实现类方法的最简单方法是什么?
例如,UIFont定义了这种方法:
+ (UIFont *)preferredFontForTextStyle:(NSString *)style NS_AVAILABLE_IOS(7_0);
我不能在这里使用instancesRespondToSelector:
,因为preferredFontForTextStyle:
不是实例方法,而是类方法。
我看到class_getClassMethod
,但是......真的吗? objc / runtime.h?
答案 0 :(得分:7)
我会用:
[MyClass respondsToSelector:mySelector]
所有类都是基类的实例。因此,所有NSObject的实例方法也是从NSObject派生的任何类的类方法。
这有点直观。毕竟,类是对象,所以NSObject的所有方法都适用于类。
如果您对为何更详细地发生这种情况感到好奇,请阅读metaclasses in Objective-C。
[[MyClass class] instancesRespondToSelector:mySelector]
不起作用的原因是NSObject actually defines +class
to return self。框架隐藏了元视图,只能通过运行时API访问。