我正在研究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对象数组仅创建一次,并且所有精灵都使用相同的数组。
有人有什么想法吗?
答案 0 :(得分:1)
什么是colorNum?在阵列的界限之外它会不会是一些疯狂的价值?
调色板是否为“保留”属性......调色板对象确实已被保留,对吧?它是合成的,还是你实现了自己的getPalette方法?