当我尝试使用IMP时,如何转换变量类型?
Person.m
-(void)priFunc:(NSString *)str{
NSLog(@"%@",str);
}
我使用IMP get priFunc,然后我想实现函数
main.m
...
IMP imp = method_getImplementation(method);
typedef void(*fn)(id,SEL,char *);
fn f = (fn)imp;
f(person,sel,"Jason");
问题是 Person.m 中的变量str的类型是NSString
,但指针fn中的变量类型是char*
。虽然构建成功,但程序会给出(lldb)
错误。
答案 0 :(得分:0)
您无法调用带有NSString *
参数的函数并将其传递给char *
并期望它能够正常工作。这两种类型不兼容。
您需要将char *
参数转换为对象或重写方法以获取char *
。