Структура передачи как возможный идентификатор?

Я хотел бы выполнить функцию, которая получает структуру в отдельном Потоке, но не уверенная, как передать право структуры.

Наличие этого:

- (void) workOnSomeData:(struct MyData *)data;

Как правильно звонить:

struct MyData data = ... ;
[[[NSThread alloc] initWithTarget:self selector:@selector(workOnSomeData:) object: ...

Используя &data не работает.

8
задан Vlad 12 April 2010 в 14:55
поделиться

2 ответа

Хотя ответ kennytm правильный, есть более простой способ.

Используйте метод NSValue + valueWithPointer: для инкапсуляции указателя в объект ani с целью отделения потока. NSValue не выполняет автоматического управления памятью указателя - это действительно непрозрачная оболочка объекта для значений указателя.

8
ответ дан 5 December 2019 в 10:40
поделиться

Объект должен быть объектом ObjC. Структура - нет.

Вы можете создать ObjC для хранения этой информации:

@interface MyData : NSObject {
  ...

или закодировать структуру в NSData, предполагая, что она не не содержит никаких указателей:

NSData* objData = [NSData dataWithBytes:&data length:sizeof(data)];

...

-(void)workOnSomeData:(NSData*)objData {
   struct MyData* data = [objData bytes];
   ...
8
ответ дан 5 December 2019 в 10:40
поделиться