Objective-C 运行时获取方法列表

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);

你可能感兴趣的:(Objective-C 运行时获取方法列表)