3

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

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

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

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

我明白class_getClassMethod了,但是……真的吗?objc/runtime.h?

4

1 回答 1

7

我会使用:

[MyClass respondsToSelector:mySelector]

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

它有一些直观的意义。毕竟,类是对象,所以 NSObject 的所有方法都对类有意义。

如果您想更详细地了解为什么会发生这种情况,请阅读Objective-C 中的元类

[[MyClass class] instancesRespondToSelector:mySelector]不起作用的原因是NSObject 实际上定义+class为返回 self。元类被框架隐藏起来,只能通过运行时 API 访问。

于 2013-11-06T21:41:38.237 回答