0

我在 NSOperation 实例中 malloc 了一大堆数据。我有一个指针:

data = malloc(humungous_amounts_of_god_knows_what);
uint8_t* data;

如何将其打包为 NSData 实例并将其返回到主线程?我假设在转换为 NSData 实例后,我可以简单地调用:

free(data);

是的?

另外,回到主线程如何检索指针?

谢谢,
道格

4

2 回答 2

1

您想要其中一种-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文档将为您服务)

于 2010-06-11T20:54:35.153 回答
0

谢谢巴里,

实际上,我选择了更简单的东西。

在指针周围放置一个 NSValue 包装器:

NSValue *value = [NSValue valueWithPointer:imageData];

将其塞入字典中以返回到主线程:

[result setObject:value forKey:cubicFaceName];

回到主线程,当我处理完数据后,我将其丢弃:

uint8_t *bits = [value pointerValue];
free(bits);

干杯,
道格

于 2010-06-12T15:13:01.023 回答