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