1、新建一个类:MyApp
在类中随便定义几个方法并实现:
- (void)run;
- (instancetype)init;
- (instancetype)initWithProgress:(NSInteger)pId;
2、使用class_copyMethodList函数获取方法列表
函数原型:
OBJC_EXPORT Method _Nonnull * _Nullable class_copyMethodList(Class _Nullable cls, unsigned int * _Nullable outCount);
参数和返回值说明:
- 参数:cls 需要获取方法列表的类 Class类型
- 参数:outCount 方法个数,unsigned int指针类型
- 返回值:Method * (方法列表),列表中的元素就是Method类型,其实质是一个指向指针的指针。
- Method是一个隐式指针类型:typedef struct objc_method *Method;
3、遍历方法列表
// 方法个数
unsigned int methodListCount = 0;
// 获取方法列表
Method *methodList = class_copyMethodList([MyApp class], &methodListCount);
// 遍历
for (unsigned int i = 0; i < methodListCount; i++) {
// 获取方法名称
const char *methodName = sel_getName(method_getName(*(methodList + i)));
NSLog(@"%@ -> %s", NSStringFromClass([MyApp class]), methodName);
}
// 释放方法列表
free(methodList);