1

昔のデモシーンの低解像度プラズマ効果をシミュレートする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回だけ作成され、すべてのスプライトが同じ配列を使用します。

誰かアイデアはありますか?

4

1 に答える 1

1

colorNumとは何ですか?配列の範囲外のクレイジーな値になる可能性はありますか?

パレットは「保持」プロパティですか...パレットオブジェクトは実際に保持されていますか?合成されていますか、それとも独自のgetPaletteメソッドを実装していますか?

于 2010-09-16T17:06:53.863 に答える