我正在为 iPhone 应用程序制作图形效果,该应用程序模拟旧演示场景中的低分辨率等离子效果。我在屏幕上有 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];
...其中调色板是精灵中的 NSArray 属性,并包含我创建的 UIColor 对象的列表。此 UIColor 对象数组仅在应用启动时创建一次,并且所有精灵都使用相同的数组。
有人有想法么?