2

我有 void* 缓冲区...我需要尽快将其封装在 NSData 结构(NSData 或 NSMutableData)中

我猜只使用一个 NSMutableData (在类中定义)

- (void)resetBytesInRange:(NSRange)range
- (void)appendBytes:(const void *)bytes length:(NSUInteger)length

甚至

- (void)replaceBytesInRange:(NSRange)range withBytes:(const void *)bytes

将比使用 [NSData dataWithData:] 每个函数调用要快得多...

这是用于音频处理的,所以它需要是最快的。

有谁可以确认我会更快地使用 NSMutableData 而不是 NSData 构造函数?

编辑 :

缓冲区总是相同的大小,NSMutableData 不需要重新分配内存......

4

1 回答 1

1

如果您只想用相同长度的NSMutableData *data新数据替换(已经初始化的)对象的内容buffer,那么最快的方法可能是

void *mutableBytes = [data mutableBytes];
memcpy(mutableBytes, buffer, length);

因为没有进行范围检查,也没有进行(重新)分配。另请参阅使用可变二进制数据中的示例。

当然,正如论坛中经常说的那样,您应该使用 Instruments 分析您的应用程序,以找出优化程序的位置。

于 2012-09-23T19:17:34.810 回答