昔のデモシーンの低解像度プラズマ効果をシミュレートするiPhoneアプリのグラフィック効果を作成しています。画面には600個の正方形があり、可能な限り高速に更新されています。私はCoreGraphicsを使用しているので(今のところ)、フリーズすることなく非常に一定の11FPSを取得できます--
しかし、単純なNSArrayルックアップを1つ追加しようとすると、iPhoneとシミュレーターが数秒ごとに数秒間フリーズします。私はこれを機器で実行しましたが、リークがあると言われています-リークはNSAutoReleasePoolに関係していますが、それは実際には役に立ちません。(私はすべての更新フレームの最初にNSAutoReleasePoolを作成し、最後にプールを排出しています。)
排除の過程で、速度低下の原因となっている1行に絞り込むことができました。この行は、フレームが更新されるたびに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オブジェクトの配列は、アプリの起動時に1回だけ作成され、すべてのスプライトが同じ配列を使用します。
誰かアイデアはありますか?