获取任意类的类方法列表

Dav*_*ong 13 cocoa objective-c objective-c-runtime

如何获取特定类的方法列表?我已经尝试使用class_copyMethodList声明的函数<objc/runtime.h>,但这只是给我实例方法.我还找到了一个函数,它给了我一个类方法的方法,但前提是我有方法的选择器first(class_getClassMethod).

有任何想法吗?

谢谢,

戴夫

小智 21

使用元类.

#import <objc/runtime.h>

int unsigned numMethods;
Method *methods = class_copyMethodList(objc_getMetaClass("NSArray"), &numMethods);
for (int i = 0; i < numMethods; i++) {
    NSLog(@"%@", NSStringFromSelector(method_getName(methods[i])));
}
free(methods);
Run Code Online (Sandbox Code Playgroud)

  • 因为这是一个`copy`方法,所以当你完成它时不要忘记`free(methods)`.无论您是否使用ARC-C分配都不是引用计数,因此自动引用计数不会对您有所帮助. (4认同)

Jim*_*eia 14

class_copyMethodList返回传递的类的实例方法.类方法实际上是类的元类的实例方法.

您的问题的解决方案包含在API文档class_copyMethodList.