传递struct as id可能吗?

geo*_*gij 8 struct objective-c

我想执行一个函数,它在一个单独的线程中获取一个结构但不知道如何正确地传递结构.

有这个:

- (void) workOnSomeData:(struct MyData *)data;
Run Code Online (Sandbox Code Playgroud)

如何正确致电:

struct MyData data = ... ;
[[[NSThread alloc] initWithTarget:self selector:@selector(workOnSomeData:) object: ...
Run Code Online (Sandbox Code Playgroud)

使用&data不起作用.

ken*_*ytm 8

object 必须是一个ObjC对象.结构不是.

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

@interface MyData : NSObject {
  ...
Run Code Online (Sandbox Code Playgroud)

或者在NSData中编码结构,假设它包含任何指针:

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

...

-(void)workOnSomeData:(NSData*)objData {
   struct MyData* data = [objData bytes];
   ...
Run Code Online (Sandbox Code Playgroud)


bbu*_*bum 8

虽然kennytm的答案是正确的,但有一种更简单的方法.

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