直感的に、キャッシュ UIImage の初期化 ( imageNamed
) を使用すると、ディスクからロードするときに時間の節約になるだけではないと常に感じていました。また、メモリの問題でもあると思いUIImage
ました。同様のデータを持つ複数の異なるインスタンスを持つ代わりに、そのデータはメモリに 1 回読み込まれます。
を使用すると、メモリimageNamed
の使用効率が向上しますか?
直感的に、キャッシュ UIImage の初期化 ( imageNamed
) を使用すると、ディスクからロードするときに時間の節約になるだけではないと常に感じていました。また、メモリの問題でもあると思いUIImage
ました。同様のデータを持つ複数の異なるインスタンスを持つ代わりに、そのデータはメモリに 1 回読み込まれます。
を使用すると、メモリimageNamed
の使用効率が向上しますか?
はい、メモリの使用効率も向上します。
ドキュメントによるとimageNamed:
:
このメソッドは、指定された名前のイメージ オブジェクトをシステム キャッシュで検索し、存在する場合はそのオブジェクトを返します。一致する画像オブジェクトがまだキャッシュにない場合、このメソッドは指定されたファイルから画像データをロードしてキャッシュし、結果のオブジェクトを返します。
ここで重要なのは、「システム キャッシュで画像オブジェクトを検索する」ことです。
確認のために、5 つの画像ビューと 1 つのボタンを含むサンプル プロジェクトを作成しました。5 回呼び出しimageNamed
て 5 つすべてを設定すると、Instruments でヒープが 19.5k 増えました。を使用するimageWithContentsOfFile:
と、66.5k 増加しました。