9

サーバーから画像をキャッシュし、アプリでスライドショーの並べ替えとして表示することを計画しています。画像を非同期で読み込んでいます。

私には2つの選択肢があります:

  1. 画像をファイルとしてキャッシュし、必要に応じて使用します。
  2. 画像オブジェクトをメモリにキャッシュし、必要に応じて使用し、アプリケーションの終了時にファイルに書き込みます。

どちらが良いでしょうか?

画像のキャッシュに関して何か提案があれば教えてください。

4

5 に答える 5

8

2 番目のアプローチには 2 つの大きな欠陥があります。

  1. 画像が多すぎると、アプリケーションにメモリ不足の警告が表示され、とにかく画像をメモリから破棄する必要があります
  2. また、アプリケーションの終了時にすべての画像をファイルに保存することもお勧めできません。アプリケーションの終了時にコードの保存が完了するとは限りません (たとえば、時間がかかりすぎると、システムがアプリを終了して画像が失われる可能性があります)。

画像をダウンロードした直後にファイルに保存し、目に見える遅延なしに表示する必要がある適切な数の画像をメモリに保持することをお勧めします(必要に応じて余分な画像をロードし、不要な画像を破棄します)。

于 2011-05-12T09:26:30.630 に答える
4

最初のオプションをお勧めします。データ サイズによってメモリ サイズが増加する場合など、より柔軟に対応できます。

于 2011-05-12T09:26:37.137 に答える
4

私は次のようにします:キャッシュされた画像(UIImageオブジェクトとして)を含むNSMutableDictionaryを用意します。画像がキャッシュにない場合は、ファイルとして利用できるかどうかを確認してください。ファイルとして利用できない場合は、ロードして辞書に入れ、ファイルにも書き込みます。

ファイルの書き込み先については、NSTemporaryDirectory() を使用するか、NSLibraryDirectoryディレクトリを作成できます(場所を特定するにはNSSearchPathForDirectoriesInDomainsを使用します)。後者には、iTunesのバックアップに含まれるという利点/欠点があります(それが利点であるかどうかは、ユースケースによって異なります)。Library ディレクトリを使用することは、バックアップされているが iTune のファイル交換対象 (Documents ディレクトリ) に表示されないデータを格納するために Apple が推奨する方法です。

于 2011-05-12T09:30:15.483 に答える
2

キャッシュを処理するためにEGOImageViewを使い始めました。非常に用途が広く、キャッシュの複雑さを処理します。

http経由で画像をプルするのに非常にうまく機能します。EGO開発者のWebサイトで見つけることができます。

http://developers.enormego.com/

于 2011-05-12T09:50:07.503 に答える