从imp调用Objective-C方法,需要使用Objective-C的运行时库(Runtime Library)。以下是一个简单的示例,展示了如何从imp调用Objective-C方法:
#import<Foundation/Foundation.h>
#import <objc/runtime.h>
@interface MyClass : NSObject
- (void)myMethod;
@end
@implementation MyClass
- (void)myMethod {
NSLog(@"myMethod called");
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
MyClass *obj = [[MyClass alloc] init];
Method method = class_getInstanceMethod([MyClass class], @selector(myMethod));
IMP imp = method_getImplementation(method);
void (*func)(id, SEL) = (void *)imp;
func(obj, @selector(myMethod));
}
return 0;
}
在这个示例中,我们首先定义了一个名为MyClass的类,并实现了一个名为myMethod的方法。然后,我们使用class_getInstanceMethod函数获取了myMethod方法的Method结构体,接着使用method_getImplementation函数获取了myMethod方法的IMP结构体。最后,我们将IMP结构体转换为一个函数指针,并使用该函数指针调用myMethod方法。
需要注意的是,由于Objective-C的运行时库是苹果公司提供的,因此在使用上述代码时,需要使用苹果公司的编译器和运行时库。
领取专属 10元无门槛券
手把手带您无忧上云