0

由于某些 NDA 功能,我不知道我可以对我正在创建的应用程序说多少,即使它可能不是新的我仍然想拯救自己,但我想知道是否有办法通过xmlDocPtr 通过选择器?如果是这样,这怎么可能?我知道我可以获取 char* 并将其转换为 NSString,但是 xmlDocPtr 是否具有相同的转换为 id 类型的能力?

4

1 回答 1

0

您是什么意思“通过选择器传递 xmlDocPtr”?鉴于您似乎正在尝试将其转换为 obj-c 对象,我假设您正在尝试使用-performSelector:withObject:? 因为如果您只是调用该方法,则对参数类型没有限制。

如果您需要动态调用采用非 obj-c 对象的选择器,您有两种选择。第一种也是推荐的方法是创建一个NSInvocation.

SEL sel = // selector that takes xmlDocPtr
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:sel]];
[invocation setSelector:sel];
[invocation setArgument:&xmlDocPtr atIndex:2]; // 0 is self, 1 is _cmd
[invocation invokeWithTarget:target];
// if you need a return value, use
// typeOfReturnValue retVal;
// [invocation getReturnValue:&retVal];

第二个是转换objc_msgSend()为适当的函数类型并调用它,尽管如果涉及浮点值或结构值(作为方法参数或返回值),这会变得更加复杂(并且有点依赖于体系结构)。仅当您习惯使用 obj-c 运行时时,才应该采用这种方法。

于 2012-05-24T00:11:41.290 回答