2010-04-12 21 views
8

我想执行一个函数,它在单独的线程中获得一个结构,但不知道如何传递结构权。将struct传递为id可能吗?

有了这个:

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

如何正确拨打:

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

使用&data不起作用。

+0

(刚刚更新标签) – Vlad 2010-04-12 14:56:12

回答

8

虽然kennytm的答案是正确的,有 是一个更简单的方法。

使用NSValue的+ valueWithPointer:方法将指针封装在ani对象中以达到脱离线程的目的。 NSValue没有对指针进行自动内存管理 - 它确实是指针值的不透明对象包装。

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]; 
    ... 
+0

这无疑是另一种选择,但然后我可以ObjC对象上马上使用,并改变我的函数接受一个对象。我想用结构来避免定义一个额外的对象。 – georgij 2010-04-12 23:16:08

0

您可以像这样通过void *传递结构。 经过测试,它的工作。

struct MyData data = ... ; 

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