Я хотел бы выполнить функцию, которая получает структуру в отдельном Потоке, но не уверенная, как передать право структуры.
Наличие этого:
- (void) workOnSomeData:(struct MyData *)data;
Как правильно звонить:
struct MyData data = ... ;
[[[NSThread alloc] initWithTarget:self selector:@selector(workOnSomeData:) object: ...
Используя &data
не работает.
Хотя ответ kennytm правильный, есть более простой способ.
Используйте метод NSValue + valueWithPointer: для инкапсуляции указателя в объект ani с целью отделения потока. NSValue не выполняет автоматического управления памятью указателя - это действительно непрозрачная оболочка объекта для значений указателя.
Объект
должен быть объектом ObjC. Структура - нет.
Вы можете создать ObjC для хранения этой информации:
@interface MyData : NSObject {
...
или закодировать структуру в NSData, предполагая, что она не не содержит никаких указателей:
NSData* objData = [NSData dataWithBytes:&data length:sizeof(data)];
...
-(void)workOnSomeData:(NSData*)objData {
struct MyData* data = [objData bytes];
...