Iphone 迭代的效率:NSArray与指针的C数组?

Iphone 迭代的效率:NSArray与指针的C数组?,iphone,cocoa,performance,Iphone,Cocoa,Performance,我在音频缓冲区级别工作,混合由一组对象创建的音频信号。因为我以44.1khz的频率在这些对象中循环,所以效率是至关重要的。在NSArray和C指针数组上迭代的效率有什么不同吗?NSMutableArray怎么样 在NSArray和C指针数组上迭代的效率有什么不同吗 对。直接在C数组上迭代会更快 大多数应用不需要担心这一点,应该到别处寻找性能提升。但是,如果在你的应用程序中,这个函数每秒运行44100次,你可能应该对它进行微优化(当然,在确保它尽可能少地运行之后,也就是说,只执行你绝对需要每秒执行

我在音频缓冲区级别工作,混合由一组对象创建的音频信号。因为我以44.1khz的频率在这些对象中循环,所以效率是至关重要的。在NSArray和C指针数组上迭代的效率有什么不同吗?NSMutableArray怎么样

在NSArray和C指针数组上迭代的效率有什么不同吗

对。直接在C数组上迭代会更快

大多数应用不需要担心这一点,应该到别处寻找性能提升。但是,如果在你的应用程序中,这个函数每秒运行44100次,你可能应该对它进行微优化(当然,在确保它尽可能少地运行之后,也就是说,只执行你绝对需要每秒执行44100次的操作)

NSMutableArray怎么样


和一个NSArray?没有您可以依赖或应该关心的差异。

协议定义了-countByEnumeratingWithState:objects:count:它使用C数组迭代NSArray、NSMutableArray和任何其他符合它的集合对象,避免了每次迭代调用-objectAtIndex:。使用性能分析来确定哪种解决方案足够快。

当然,如果他正在做音频应用程序,而没有对代码进行矢量化以避免尽可能多的迭代,那么可能会出现其他性能问题。。。。有一些关于使用C/C++优化Cocoa的详细信息……在他的例子中,从NSArray/CGRectContainsPoint()切换是~4倍的提升,但更改算法是~200倍的提升。实际上,不是。快速枚举是一种让集合类完全在内部管理迭代的方法,但它与C数组没有任何类似之处。协议通过枚举声明countByEnumeratingWithState:objects:count:,描述如下:通过引用返回发送方应迭代的对象的C数组,并将数组中的对象数作为返回值。“是的——但这根本不像枚举一个直接的C数组,也不意味着集合类的内部结构是一个C数组。您仍然需要支付复制引用和管理快速枚举元数据的成本。它仍然比常规的旧C数组慢——不如-objectEnumerator慢,但仍然很重要,特别是对于音频处理。我指的不是集合类的内部结构,只是for…in在C数组上迭代。
for(…in…
不在C数组上迭代,但是在一系列的C数组上。没有为枚举创建单个C数组,性能配置文件与迭代单个连续C数组的性能配置文件完全不同。