一種のギャラリーであるアプリケーションを作成しています - さまざまなメディア コンテンツをフルスクリーン ビューアとして表示します。Allocations Instrument は、アプリケーションの使用時に Live Bytes パラメータが 40 Mb を超えないことを示しています。一方、ページを 20 ~ 30 回スライドすると、アプリは 100% 強制終了されます。Dirty Memory パラメータを確認したところ、Live Bytes サイズの 10 倍の大きさであることがわかりました。そして、そのダーティ メモリのほとんどがイメージ IO を消費しました。
編集、別のスクリーンショット:
上記の割り当てピークは、ビデオ/画像メディア コンテンツの切り替えです。問題は、ダーティ メモリがほぼ直線的に増加することであり、どうにかして解放する必要があります。
次に、アプリケーションの設計についてです。アプリケーション画面には、1 つの横スクロール ビューがあります。スクロール ビューには、複数の画像を含むビデオまたはコラージュ オブジェクトが含まれます。メモリを節約するために、一度に作成されるページは現在のページと左右のページの 3 ページだけです。そのため、スクロール ビューをスライドさせると、ページは常にその場で作成および削除されます。
メソッドを使用してロードしたすべての画像[UIImage imageWithContentOfFile: path]
。コラージュ オブジェクトは、imagesArray 内に UIImage インスタンスを格納します。dealloc メソッドで imagesArray 属性がクリアされます。
だから、質問:
- システムバグの一種か
[UIImage imageWithContentOfFile?]
- Image IO キャッシュですか?
- クリアできますか?