2009-07-26 1 views
3

Я хочу передать точку на объект C++ для селектора, вызванного using performSelectorOnMainThread. Простое наведение указателя на «id» (objc_object *), похоже, не работает. Я всегда мог написать свой собственный объектный класс оболочки C, но должен быть довольно стандартный способ сделать это. На самом деле я ничего не нашел в документации Apple.Передача собственного указателя на выполнение аргументаSolectorOnMainThread с аргументомObject?

Каков наилучший способ для этого?

Вот что я хочу сделать:

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

Не нужно создавать свой собственный класс обертки; [Значение NSValueWithPointer:] предназначено для указателей бокса. Просто сделайте someMethod взять NSValue, а не необработанный указатель, а затем извлечь указатель с pointerValue.

(я считаю, что * методы performSelector сохраняют свои аргументы так, чтобы объект гарантированно продлится до звонка, поэтому вы не можете просто бросить случайное значение к идентификатору в этом параметре.)

+0

Это звучит правильно - однако для меня он всегда работал с простым указателем на указатели без объекта на идентификатор. Думаю, я на тонком льду;) – Till

Смежные вопросы