Objective c 尽可能传递结构id?

Objective c 尽可能传递结构id?,objective-c,struct,Objective C,Struct,我想执行一个函数,该函数在一个单独的线程中获得一个结构,但不确定如何正确传递该结构 具有以下特征: - (void) workOnSomeData:(struct MyData *)data; 如何正确调用: struct MyData data = ... ; [[[NSThread alloc] initWithTarget:self selector:@selector(workOnSomeData:) object: ... 使用&data无效。对象必须是ObjC对象。结构不是 您可

我想执行一个函数,该函数在一个单独的线程中获得一个结构,但不确定如何正确传递该结构

具有以下特征:

- (void) workOnSomeData:(struct MyData *)data;
如何正确调用:

struct MyData data = ... ;
[[[NSThread alloc] initWithTarget:self selector:@selector(workOnSomeData:) object: ...
使用
&data
无效。

对象必须是ObjC对象。结构不是

您可以创建一个ObjC来保存以下信息:

@interface MyData : NSObject {
  ...
或者在NSData中对结构进行编码,假设它不包含任何指针:

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

...

-(void)workOnSomeData:(NSData*)objData {
   struct MyData* data = [objData bytes];
   ...

虽然肯尼特的答案是正确的,但有 这是一种更简单的方法


使用NSValue的+valueWithPointer:方法将指针封装在ani对象中,以便旋转线程。NSValue不对指针进行自动内存管理——它实际上只是指针值的不透明对象包装器。

您可以像这样通过void*传递结构。 经过测试,效果良好

struct MyData data = ... ;

[[[NSThread alloc] initWithTarget:self selector:@selector(workOnSomeData:) object:(void *)(&data)];

这当然是另一个选项,但我可以直接在ObjC对象上使用,并更改我的函数以接受对象。我想使用struct来避免定义额外的对象。