IOS NSData构造函数VS NSMutableData实时使用目的

标签 ios nsdata nsmutabledata

我有 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/

相关文章:

ios - 为什么归一化后的目标检测结果中存在负坐标? (CoreML、Vision、Swift、Ios)

swift - NSData contentsOfUrl 返回 nil

iphone - 将 UIImage 转换为 NSData 但保留为 GIF 文件

iphone - 在 objective-c 中创建数据包

objective-c - 如何串联多个NSData?

android - 向移动设备推送通知 : SNS vs OneSignal vs GCM

ios - 如何将自定义表情符号的文本代码与 UITextView 中的文本一起发送到服务器?

ios - NSMutableData 消失

ios - 来自 NSURLConnection 的 didReceiveDate 方法警告

ios - ScrollView 未滚动到顶部