Я смешиваю части Objective C в проекте C ++ (пожалуйста, не спорьте об этом, его кроссплатформенность).
Теперь я хочу вызвать некоторые функции или методы C ++ в правильном потоке (то есть в основном потоке) в среде какао.
Мой текущий подход заключается в передаче указателей на функции для экземпляра target-c (полученного из NSObject
) и выполнения на нем performSelector
/ performSelectorOnMainThread
.
Но performSelector
ожидают объекты в качестве своих аргументов, так как обычно это обернуть?
Пример:
typedef void(*FnPtr)(void*);
FnPtr fn;
[someInstance performSelector:@selector(test:) withObject:fn];
... где тест объявляется как:
- (void)test:(FnPtr)fn;
Должен добавить, что я только начал с объектива-c на этой неделе, поэтому, если есть лучший способ, я также был бы рад услышать об этом.
Также обратите внимание, что у меня нет никакого доступа к основному циклу или любым объектам приложения, потому что проект является плагином браузера (в настоящее время только Mac ориентирован на Safari).