我想知道objective-c中音频数据最适用的缓冲区实现类型是什么。我在 iPhone 上处理音频数据,我在录制或播放时对音频数据进行一些直接的数据操作/DSP,因此性能很重要。几个月以来我一直在做 iPhone 开发。目前我正在处理元素类型为 SInt16 或 Float32 的 c 数组,但我正在寻找更好的东西。
AFAIK,指针迭代的 c 数组的性能在目标 c 环境中是无与伦比的。但是,指针算术和 c 数组很容易出错。您始终必须确保您不会越界访问数组。如果这样做,您不会立即收到运行时错误。而且您必须手动确保正确分配和释放数组。
因此,我正在寻找替代品。有哪些高性能替代品?Objective-c 中有什么类似于 c++ 风格的 std::vector 的吗?
类似的意思是:
- 很棒的表演
- 可使用基于指针/迭代器的循环进行迭代
- 没有将 Float32 或 SInt16 等基本数据类型装箱/拆箱到objective-c 对象的开销(顺便说一句,objective-c 中“基本数据类型”的正确词是什么?)
- 边界检查
- 可以将其他列表或数组的块复制/读取/写入到我的搜索列表实现中和从中取出
- 包括内存管理
我已经搜索并阅读了很多内容,当然NSData
并且NSMutableArray
是上述解决方案之一。但是,由于基本数据类型的装箱/拆箱开销,它们不会使处理成本加倍吗?代码看起来非常丑陋,就像一个简单的“设置”操作变成了某个恐龙的名字replaceObjectAtIndex:withObject:
,这不是我关心的问题,但它仍然巧妙地让我觉得这个类不是为我设计的。