将xmlDocPtr对象传递给选择器

时间:2012-05-23 23:38:37

标签: ios selector libxml2

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

1 个答案:

答案 0 :(得分: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运行时,你应该采用这种方法。