是什么让NSArray访问速度如此之慢?

我正在研究一款iPhone应用程序的图形效果,该应用模拟了旧的demoscene时代的低分辨率等离子效应。我在屏幕上有600个正方形,正在尽快更新。由于我正在使用CoreGraphics(现在),我可以获得一个非常恒定的11FPS而不会冻结 - 但是当我尝试添加一个简单的NSArray查找时,iPhone和模拟器每隔几秒就会冻结几秒钟。我在仪器中运行它并说它有泄漏 - 泄漏与NSAutoReleasePool有关,但这并没有真正帮助。 (我在每个更新框架的开头创建一个NSAutoReleasePool,最后在池中耗尽。) 通过消除过程,我已经能够将其缩小到导致减速的一条线。对于每帧更新的600个块精灵中的每一个,都会出现这条线:
//SLOOWWWNESS /LEAKING NSAUTORELEASEPOOL IS here (freezing every second or so)
UIColor *color = [palette objectAtIndex:colorNum];

//BUT DOESNT HAPPEN HERE... (works at full speed)
UIColor *color = [UIColor colorWithRed:0.25f green:0.25f blue:colorNum/15.0 alpha:1.0f];
...其中palette是精灵中的NSArray属性,并包含我创建的UIColor对象列表。当应用程序启动时,此UIColor对象数组仅创建一次,并且所有精灵都使用相同的数组。 有人有主意吗?     
已邀请:
什么是colorNum?在阵列的界限之外它会不会是一些疯狂的价值? 调色板是'保留'属性......调色板对象确实被保留了,对吗?它是合成的,还是你实现了自己的getPalette方法?     

要回复问题请先登录注册