我在NSOperation实例中有一大堆数据。我有一个指针:
data = malloc(humungous_amounts_of_god_knows_what);
uint8_t* data;
如何将其打包为NSData实例并将其返回主线程?我假设在转换为NSData实例后,我可以简单地调用:
free(data);
是
另外,回到主线程如何检索指针?
谢谢,
道格
答案 0 :(得分:1)
您需要其中一个-dataWithBytes:length:
或其变体:
NSData *d = [NSData dataWithBytes:data length:lengthOfDataInBytes];
复制字节,然后您可以free(data)
。要保存副本,假设使用data
分配malloc
,请使用:
NSData *d = [NSData dataWithBytesNoCopy:data length:lengthOfDataInBytes];
在这种情况下,您应该不在缓冲区上调用free
,因为NSData
实例会为您释放它。
请注意,所有这些方法都返回autoreleased
实例,因此如果要在线程之间保留它(并且不使用GC),则可能必须保留它。您可以使用等效的alloc
/ initWithBytes:...
初始值设定项。
要获取指向NSData内容的指针,请使用bytes
。
(我认为使用NSData
文档只需几分钟即可为您提供服务)
答案 1 :(得分:0)
谢谢巴里,
我实际上更简单。
在指针周围放置一个NSValue包装器:
NSValue *value = [NSValue valueWithPointer:imageData];
将它放入字典中以返回主线程:
[result setObject:value forKey:cubicFaceName];
回到主线程,当我完成数据后,我将其丢弃:
uint8_t *bits = [value pointerValue];
free(bits);
干杯,
道格