Передать struct как id возможно? - PullRequest
8 голосов
/ 12 апреля 2010

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

Имея это:

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 13 апреля 2010

Хотя ответ Кеннимма верен, это более простой способ.

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

8 голосов
/ 12 апреля 2010

object должен быть объектом ObjC. Структура не является.

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

@interface MyData : NSObject {
  ...

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

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

...

-(void)workOnSomeData:(NSData*)objData {
   struct MyData* data = [objData bytes];
   ...
0 голосов
/ 14 июня 2011

Вы можете пропустить структуру через void * вот так. Протестировано и все заработало.

struct MyData data = ... ;

[[[NSThread alloc] initWithTarget:self selector:@selector(workOnSomeData:) object:(void *)(&data)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...