最近、アプリでメモリ管理の問題に直面しました。
このアプリケーションは高品質の画像を利用するため、メモリ使用量が大幅に増加します。
問題をより明確にするために、プロジェクトと画像の詳細に関するいくつかの情報を次に示します。
私のプロジェクトには約 90 枚の画像が追加されています。それらの半分は、新しい iPad Retina ディスプレイをサポートするために @2x サイズで設計されています。したがって、各デバイスの画像の最大数は約 45 です。
すべての画像の Retina バージョンの合計サイズは約 25 メガバイトです (個々の画像のサイズは 10 KB から 6.8 MB まで可変です)。一方、すべての標準イメージのサイズは 11 メガバイトに相当します。
プロジェクトの XCode アーカイブのサイズは 44 メガバイトです。
標準バージョンの画像の個々の画像の最大解像度は約 1500x4000 px で、最小解像度は約 60x60 px です。
Retina バージョンの画像の個々の画像の最大解像度は約 3000x8000 px で、最小解像度は約 120x120 px です。
Retina バージョンのイメージには、名前に「@2x~ipad」という接尾辞が付いていますが、他のイメージの名前の接尾辞は「~ipad」です。
アプリのライフサイクル中に作成されるほとんどのイメージのインスタンスは 1 つだけです。
アプリの起動時に約 25 枚の画像が読み込まれ、残りはゲームプレイ中に読み込まれます。
[UIImage imageNamed:@"image_name.png"] 画像をロードしたい場所ならどこでも使用しました ([UIImage imageWithContentsOfFile] と [UIImage imageWithData] の使用は非常に非効率的でした)。
しかし、ここに問題があります:
Instruments を使用してメモリ使用量を追跡すると、アプリのメモリ使用量が非常に高いことがわかります。さまざまな状況でのメモリ割り当ての統計を次に示します。
起動時に標準イメージを使用して iPad 2 に割り当てられたメモリ: 58 MB
ゲームプレイ中の標準イメージを使用した iPad 2 の割り当てメモリ (すべてのイメージがロードされた場合): 131 MB
- 起動時に Retina イメージを使用する新しい iPad に割り当てられたメモリ: 211 MB
- ゲームプレイ中に Retina 画像を使用した新しい iPad に割り当てられたメモリ (すべての画像が読み込まれた場合) : 470 MB
割り当てられたメモリが画像の合計サイズよりもはるかに大きい理由はありますか?