有效的15x10阵列计算

时间:2009-11-29 22:47:37

标签: objective-c cocoa performance arrays

现在我开发一款iPhone应用程序时遇到了麻烦。 我需要计算150个零件并在画布上绘制它。 我有这样的代码:

    for (int i=x1; i<=x2; i++) {
            for (int j=y1; j<=y2; j++) {
                    x=[NSNumber numberWithInt:i];
                    y=[NSNumber numberWithInt:j];

                    BoxCache *box = [[cache objectForKey:x] objectForKey:y];

                    if (box) {
                            ret.count += [box.species count];
                    }

                    [x release];
                    [y release];
            }
    }

他的执行累了〜5秒(计算阵列15x10),我想问大家,任何减少计算时间的想法或做那些不同的想法。

2 个答案:

答案 0 :(得分:1)

您可能需要提供更多信息,因为您的问题相当模糊。根据您发布的内容,我有两条评论:

首先,你问的问题。为什么不使用C数组和整数,而不是(似乎是)字典?它的很多更快。

其次,你正在创建自动释放的NSNumber实例(+ numberWithInt:给你一个自动释放的数字),然后通过调用-release过度释放它们。

需要澄清更好,更具体的答案的事情:

  1. 什么是BoxCache以及它是如何工作的?
  2. 您在第一段中提到的计算在哪里?
  3. 什么是“缓存”,它来自哪里,以及它如何运作?

答案 1 :(得分:1)

我不是使用字典词典(这是非常低效的),而是使用常规的旧C数组并自己对内存进行malloc。我可能会将它包装在一个类中,只是为了使内存管理规则更加清晰,但就是这样。