私は最近、私のアプリでいくつかのメモリ管理の問題に直面しました。非常に高いメモリ使用量 - iPadで大きな画像を扱うには?
このアプリケーションでは、いくつかの高品質画像が利用されており、メモリ使用量が大幅に増加しています。ここで
は、問題がより明確にするプロジェクトやイメージの詳細に関するいくつかの情報は以下のとおりです。
私のプロジェクトに追加した約90の画像があります。それらの半数は、New iPad Retina Displayをサポートするために、2倍のサイズで設計されています。したがって、各デバイスの画像の最大数は約45です。
すべての画像の網膜バージョンの合計サイズは約25メガバイトです(個々の画像のサイズは10 KBから6.8 MBまで可変です)。一方、すべての標準画像のサイズは11メガバイトに等しい。
プロジェクトのXCodeアーカイブのサイズは、44メガバイトです。
画像の標準バージョンでの個別画像の最大解像度は約1500x4000pxですが、最小値は60x60pxです。
Retina版の画像の最大解像度は約3000x8000pxで、最小は120x120pxです。
画像の網膜版の名前には「@ 2x〜ipad」というサフィックスがあり、他の名前の接尾辞は「〜ipad」です。
ほとんどの画像のインスタンスは、アプリのライフサイクル中に作成されます。
アプリ起動中に約25枚の画像が読み込まれ、残りはゲームプレイ中に読み込まれます。
[UIImage imageNamed:@ "image_name.png"](UIImage imageWithContentsOfFileを使用し、[UIImage imageWithData]を使用すると非常に効率的ではありませんでした)どこでも画像をロードします。
しかし、ここで問題がある:私はアプリのメモリ使用量が非常に高いことがわかり楽器を使用してメモリ使用量を追跡
が。ここでは、メモリ割り当てのの統計は、さまざまな状況にあります。起動時に標準画像を使用してiPad 2の上
割り当てられたメモリ:(すべての画像ゲームプレイ中に標準画像を使用してiPad 2の上の58メガバイト
割り当てられたメモリ)ロードされます。起動時に網膜の画像を使用して新しいiPad上で131メガバイト
- 割り当てられたメモリ:すべてのイメージがロードされているゲームプレイ()の間、網膜の画像を使用して新しいiPad上で211メガバイト
- 割り当てられたメモリ:470メガバイト
メモリが割り当てられた理由は、画像の合計サイズよりもはるかに高いですか?
なぜ画像をメモリに読み込んでいますか? UIImage imageNamedを使用しないでください。代わりにUIImage imageWithContentsOfFileを使用してください。後でメモリにイメージを永続的にロードしないようにしてください。また、イメージが巨大である場合、それらをCATiledLayerクラスに描画して描画する必要がありますそれらは画面にもっと効率的に表示されます。 – Lefteris
ゲームの前と最中にすべての画像が必要なので、すべての画像をメモリにロードしています。 他のアプリのような通常のデザインには従っていないので、それらの画像を読み込む必要があります。言い換えれば、必要なときにのみ各イメージをロードしていますが、起動時にすべてのイメージをロードする必要があるという問題があります。D –