CFArray和NSArray之间的差异



我正在寻找一种更简单的方法来操作iPhone上的音频缓冲区。我主要是想用C来避免指针问题和数组计数问题,但不想被NSNumber或NSInteger之类的数字对象拖慢,因为我必须使用NSArray。

我遇到过CFArray,它似乎是一个不错的中间地带。我的这个假设正确吗?还是我错过了什么?

不是。CFArrayNSArray基本上是一样的,你甚至可以在两者之间进行转换,这叫做免费桥接。

CFArray(及其可变对应对象)确实允许您指定自己的回调函数来保留和释放数组中的对象(指针),这将允许您在数组中存储任意指针(而不仅仅是NSObject)并实现自己的内存管理方案,但我怀疑这是否会带来任何真正的性能提升。对于您的用例,C数组可能是最好的选择。

如果性能和内存大小有任何问题(它们可能用于实时音频处理),请坚持使用纯C数组,并学习如何正确地对数组传递和访问进行编码。

无论如何,您都需要处理C阵列中的音频,因为iOS音频队列和音频单元API使用C阵列传递音频数据。

如果你不喜欢C风格,想使用一些需要面向对象的类风格,我真的建议你使用C++,例如std::vector或类似的。不要将Objective-C用于音频——它不是为信号处理而设计的!Obj-C非常适合处理UI和连接信号系统中的对象。任何类型的"真实"计算都应该始终在C或平面C++中完成。

最新更新