iphone - 这个循环可以优化吗?

标签 iphone objective-c cocoa optimization

我正处于 iPhone 应用程序的调试/优化阶段。我还有一个瓶颈 - 程序有明显滞后的唯一地方,它在以下循环中:(顺便说一下,我用字母和类型重命名了变量。(真实名称更易于阅读在实际的应用程序中,但脱离上下文没有什么意义,所以我希望这已经足够清楚了。)这是循环:

for(i=0;i<xLong; i+=yFloat*zShort){
  aFloat=0.0;
  for(int j=i;j<i+yFloat*zShort;j++){
    aFloat=hArray[j]/kFloat;
  }
  bNSNumber = [NSNumber numberWithFloat:aFloat]; 
  [cNSMutableArray addObject:bNSNumber];
}

所有异议的创建和清理都在此循环之外。

(这里发生的事情应该很简单,但基本上我有一个非常大的数组(数百万),我正在以 yFloat*zShort 长度的 block 遍历该数组,添加其中的所有元素 block ,并将最后的总和插入另一个数组。因此,如果 hArray 的长度为一百万个元素,而我的 block 长度为 200,我将对前 200 个元素求和,将总数插入 cNSMutableArray,然后继续处理下一个 200 个元素在 hArray 中。最后,cNSMutableArray 将有 5000 个元素。)

当外循环在25k左右,内循环在200左右时,这段代码运行大约需要4秒。我当然希望尽可能降低它,因为在现实世界中,外环可能要大得多。

有什么办法可以加快速度吗?

感谢您的任何想法!

最佳答案

您是否尝试过制作 C 风格的 float 组而不是使用 NSMutableArray?创建那么多包装器 (NSNumber) 的开销会加起来。

关于iphone - 这个循环可以优化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1990858/

相关文章:

iphone - 没有动画的 UIToolbar 过渡

iphone - 使用 xib 和通过代码添加的区别 - iPhone

c# - 仅在特定 html 文件上从 uiwebview 中删除表单助手 (Phonegap)

objective-c - 如何在核心数据关系实际发生变化之前观察它?

objective-c - NSUserNotificationCenter defaultNotificationcenter 返回 nil

python - 在 PyObjC 中实现 openFile 的 NSApplication 委托(delegate)协议(protocol)

iphone - 将 xcode 4.6 iPhone 应用程序转换为通用应用程序

ios - UIApplicationDelegate 但对于每个 ViewController

cocoa - Mac OS X - 系统偏好设置 Pane 无法打开

objective-c - Cocoa 中的抽象类内存管理