iOS通过imp获得类名
时间: 2024-03-21 22:38:18 浏览: 67
在 iOS 中,可以通过 `imp`(implementation)指针来获取方法实现。虽然 `imp` 指针本身并不包含类名信息,但是可以通过一些技巧来获取类名。
具体来说,可以通过 `class_getMethodImplementation` 函数来获取方法的 `imp` 指针,然后通过 `dladdr` 函数来获取该 `imp` 指针所对应的符号信息(symbol),从而获取类名。
下面是示例代码:
```
#import <dlfcn.h>
#import <objc/runtime.h>
void *imp = class_getMethodImplementation([NSString class], @selector(lowercaseString));
Dl_info info;
if (dladdr(imp, &info) && info.dli_sname) {
NSString *symbol = [NSString stringWithUTF8String:info.dli_sname];
NSArray *components = [symbol componentsSeparatedByString:@" "];
NSString *className = [components[0] substringFromIndex:1];
NSLog(@"Class name: %@", className);
}
```
在上面的示例代码中,首先获取了 `NSString` 类中 `lowercaseString` 方法的 `imp` 指针,然后使用 `dladdr` 函数获取 `imp` 指针所对应的符号信息,最后解析符号信息来获取类名。
需要注意的是,这种方法并不是很可靠,因为在某些情况下,符号信息可能并不包含类名。因此,在实际开发中,应该根据具体情况选择其他更可靠的方式来获取类名。
阅读全文