Ios 将xmlDocPtr对象传递到选择器

Ios 将xmlDocPtr对象传递到选择器,ios,selector,libxml2,Ios,Selector,Libxml2,由于NDA的一些功能,我不知道我能对我正在创建的应用说多少,即使它可能不是新的,我仍然想保存自己,但我想知道是否有办法通过选择器传递xmlDocPtr?如果是,这怎么可能?我知道我可以获取一个char*并将其转换为NSString,但是xmlDocPtr是否具有转换为id类型的相同功能?什么是“通过选择器传递xmlDocPtr”?鉴于您似乎试图将其转换为obj-c对象,我假设您正在尝试使用-performSelector:withObject:?因为如果只是调用该方法,则对参数类型没有限制 如果

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

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

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


第二种方法是将
objc_msgSend()
强制转换为适当的函数类型并调用该函数,尽管如果涉及浮点值或结构值(如方法参数或返回值),这会变得更复杂(在某种程度上取决于体系结构)。只有在您熟悉obj-c运行时的情况下,才应该采用这种方法。

我之所以尝试将对象传递到选择器,是因为我的所有计算和加载都是在后台线程上完成的,我需要将计算/加载的数据发送到主线程,以便GUI使用。@Seb:在这种情况下,最简单的解决方案是只要
dispatch\u async(dispatch\u get\u main\u queue(),^{/*在这里执行主队列工作*/})
(或者如果确实需要,可以使用
dispatch\u sync()
,同步跨线程访问的标准警告就在这里)。你救了我的命。非常感谢。
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];