instanceRespondToSelector的等价类是什么?

时间:2013-11-06 21:17:32

标签: ios nsobject

检查类是否实现类方法的最简单方法是什么?

例如,UIFont定义了这种方法:

+ (UIFont *)preferredFontForTextStyle:(NSString *)style NS_AVAILABLE_IOS(7_0);

我不能在这里使用instancesRespondToSelector:,因为preferredFontForTextStyle:不是实例方法,而是类方法。

我看到class_getClassMethod,但是......真的吗? objc / runtime.h?

1 个答案:

答案 0 :(得分:7)

我会用:

[MyClass respondsToSelector:mySelector]

所有类都是基类的实例。因此,所有NSObject的实例方法也是从NSObject派生的任何类的类方法。

这有点直观。毕竟,类是对象,所以NSObject的所有方法都适用于类。

如果您对为何更详细地发生这种情况感到好奇,请阅读metaclasses in Objective-C

[[MyClass class] instancesRespondToSelector:mySelector]不起作用的原因是NSObject actually defines +class to return self。框架隐藏了元视图,只能通过运行时API访问。