将一个本机指针传递给performSelectorOnMainThread的withObject参数?

时间:2009-07-26 21:06:32

标签: cocoa macos

我想将一个点传递给使用performSelectorOnMainThread调用的选择器的C ++对象。简单地将指针转换为'id'(objc_object *)似乎不起作用。 我总是可以编写自己的目标C包装类,但应该有一个相当标准的方法来做到这一点。我没有在苹果的文档中找到任何关于它的文章。

最好的方法是什么?

这就是我想要做的事情:

...
Foo *foo = new Foo(); // Foo is a C++ class
MyObject *myObj = [[MyObject alloc] init]; // Obj-C class
[myObj performSelectorOnMainThread:@selector(someMethod:) withObject:foo waitUntilDone:NO];
...

谢谢!

1 个答案:

答案 0 :(得分:5)

无需制作自己的包装类; [NSValue valueWithPointer:]是为拳击指针设计的。只需使someMethod获取NSValue而不是原始指针,然后使用pointerValue提取指针。

(我相信performSelector *方法保留它们的参数,以便保证对象通过调用,这就是为什么你不能只将随机值转换为该参数中的id。)