Objective-C 通过运行时方法获得函数名的方法有哪些
时间: 2023-10-30 08:07:13 浏览: 56
在Objective-C中,可以通过运行时库提供的方法来获取函数名。常用的方法有以下几种:
1. 使用SEL获取函数名
在Objective-C中,每个方法都对应一个SEL类型的唯一标识符,可以通过这个标识符来获取方法名。具体实现方式如下:
```objective-c
- (void)testMethod {
SEL sel = @selector(testMethod);
const char *methodName = sel_getName(sel);
NSLog(@"方法名为:%s", methodName);
}
```
2. 使用NSMethodSignature获取函数名
NSMethodSignature是一个类,用于表示方法的参数类型和返回值类型。可以通过它的方法获取方法的名称。具体实现方式如下:
```objective-c
- (void)testMethod {
NSMethodSignature *signature = [self methodSignatureForSelector:_cmd];
const char *methodName = [signature name];
NSLog(@"方法名为:%s", methodName);
}
```
3. 使用class_copyMethodList获取函数名
class_copyMethodList是一个函数,用于获取一个类的所有方法。可以通过遍历方法列表来获取对应的方法名。具体实现方式如下:
```objective-c
- (void)testMethod {
unsigned int methodCount = 0;
Method *methodList = class_copyMethodList([self class], &methodCount);
for (int i = 0; i < methodCount; i++) {
Method method = methodList[i];
const char *methodName = sel_getName(method_getName(method));
NSLog(@"方法名为:%s", methodName);
}
free(methodList);
}
```
需要注意的是,这种方式只能获取当前类的方法名,无法获取父类的方法名。如果需要获取父类的方法名,可以使用class_copyMethodList函数遍历父类的方法列表。
以上是Objective-C中通过运行时方法获得函数名的常用方法,还有其他一些方法,具体可以查看Objective-C运行时库提供的API文档。