我想执行一个函数,该函数在单独的Thread中获取结构但不确定如何正确地传递结构。
有这个:
- (void) workOnSomeData:(struct MyData *)data;
如何正确致电:
struct MyData data = ... ;
[[[NSThread alloc] initWithTarget:self selector:@selector(workOnSomeData:) object: ...
使用&data
不起作用。
答案 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)];