这个不对,有其他方法吗
时间: 2024-03-18 13:42:29 浏览: 26
非常抱歉,我的回答有误。在 Objective-C 中,没有提供直接从 `IMP` 获取对应的 `SEL` 选择器的函数,因为 `IMP` 可以指向多个不同的方法实现,而一个 `SEL` 选择器只对应一个方法。
如果你已经有一个 `IMP`,但不知道对应的方法的选择器,可以通过以下方式来查找:
```objective-c
- (void)testMethod {
IMP imp = [self methodForSelector:@selector(testMethod)];
unsigned int count;
Method *methods = class_copyMethodList([self class], &count);
for (int i = 0; i < count; i++) {
Method method = methods[i];
if (method_getImplementation(method) == imp) {
SEL sel = method_getName(method);
const char *selName = sel_getName(sel);
NSLog(@"SEL为:%s", selName);
break;
}
}
free(methods);
}
```
这段代码通过 `class_copyMethodList` 函数获取当前类的所有方法列表,然后遍历方法列表,查找与给定的 `IMP` 匹配的方法,从该方法中获取对应的 `SEL` 选择器。
需要注意的是,如果 `IMP` 指向的函数与多个方法实现匹配,则可能会获取到错误的结果。因此,建议先确定 `IMP` 对应的方法实现,再从中获取对应的 `SEL` 选择器。