传递struct as id可能吗?

时间:2010-04-12 14:54:14

标签: objective-c struct

我想执行一个函数,该函数在单独的Thread中获取结构但不确定如何正确地传递结构。

有这个:

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

如何正确致电:

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

使用&data不起作用。

3 个答案:

答案 0 :(得分:8)

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

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

@interface MyData : NSObject {
  ...

或在NSData中对结构进行编码,假设包含任何指针:

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

...

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

答案 1 :(得分:8)

虽然肯尼特的回答是正确的,但那里  是一种更简单的方法。

使用NSValue的+ valueWithPointer:方法将指针封装在ani对象中,以便分离线程。 NSValue对指针没有自动内存管理 - 它实际上是指针值的不透明对象包装器。

答案 2 :(得分:0)

您可以像这样通过void *传递结构。 经过测试并且有效。

struct MyData data = ... ;

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