可可&可可触摸。如何从普通的ole指针创建NSData对象?

时间:2010-06-11 20:07:34

标签: cocoa-touch malloc nsdata nsoperation

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

data = malloc(humungous_amounts_of_god_knows_what);
uint8_t* data;

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

free(data);

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

谢谢,
道格

2 个答案:

答案 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);

干杯,
道格