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不起作用.
本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)
虽然kennytm的答案是正确的,但有一种更简单的方法.
使用NSValue的+ valueWithPointer:方法将指针封装在ani对象中,以便分离线程.NSValue对指针没有自动内存管理 - 它实际上是指针值的不透明对象包装器.