2009-07-26 30 views
3

我想通過一個點傳遞給使用performSelectorOnMainThread調用的選擇器的C++對象。簡單地將指針轉換爲'id'(objc_object *)似乎不起作用。 我總是可以編寫自己的目標C封裝類,但應該有一個相當標準的方法來做到這一點。儘管如此,我並沒有在蘋果的文檔上找到任何東西。傳遞一個本地指針performSelectorOnMainThread的withObject參數?

這樣做的最好方法是什麼?

這就是我想做的事:

... 
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]; 
... 

謝謝!

回答

5

無需製作自己的包裝類; [NSValue valueWithPointer:]是專爲拳擊指針。只需讓someMethod取一個NSValue而不是一個原始指針,然後用pointerValue提取指針。

(我相信performSelector *方法保留它們的參數,以便對象是保證持續到呼叫,這就是爲什麼你不能只投一個隨機值的ID在該參數)。

+0

這聽起來是正確的 - 但對我來說,它總是隻是簡單地將非對象指針指向一個id。猜猜我在薄冰上;) – Till 2009-11-15 00:23:09