我有 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 不需要重新分配内存...
最佳答案
如果您只是想用相同长度的 buffer
中的新数据替换(已初始化的)NSMutableData *data
对象的内容,那么最快的方法是大概
void *mutableBytes = [data mutableBytes];
memcpy(mutableBytes, buffer, length);
因为没有进行范围检查,也没有进行(重新)分配。另请参阅 Working With Mutable Binary Data 中的示例.
当然,正如本论坛中常说的那样,您应该使用 Instruments 分析您的应用程序,以找出优化程序的地方。
关于IOS NSData构造函数VS NSMutableData实时使用目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12554097/