如何在IMP中转换变量类型

时间:2016-11-30 03:05:58

标签: objective-c

当我尝试使用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)错误。

1 个答案:

答案 0 :(得分:0)

您无法调用带有NSString *参数的函数并将其传递给char *并期望它能够正常工作。这两种类型不兼容。

您需要将char *参数转换为对象或重写方法以获取char *