在运行时,如何列出给定类的所有Objective-C类方法?

时间:2019-05-15 01:38:28

标签: objective-c

要列出Objective-C类的所有实例方法,请使用NSClassFromString("UIView")来获取该类,然后调用class_copyMethodList来获取方法的列表。

但是如何获取该类的类方法,而不是实例方法?

1 个答案:

答案 0 :(得分:2)

每个Objective-C @implementation在运行时都由一个对象(“类对象”)表示。类对象管理实例方法的方法字典。

例如,对于UIView,有一个UIView类对象。当您调用NSClassFromString(@"UIView")(或[UIView class][UIView self])时,它将返回UIView类对象。 UIView类对象管理UIView实例方法的方法字典。

UIView类对象本身是另一个类的实例,称为UIView元类。 UIView元类由另一个类对象UIView元类对象表示。 UIView元类对象管理UIView类方法的方法字典。

因此,要获取UIView的类方法列表,您需要将UIView元类对象传递给class_copyMethodList

Class UIView_class = NSClassFromString(@"UIView");
Class UIView_metaclass = object_getClass(UIView_class);
unsigned int count;
Method *classMethods = class_copyMethodList(UIView_metaclass, &count);