2

私のモデルは Core Data から来ています。私のビーンには、モデルに NSData として保存された画像があります。

画像を表示するには、次のことを行う必要があります。

[UIImage imageWithData:bean.imageData] 

どこでもそうしてもいいですか?つまり、ビュー #1​​ から [UIImage imageWithData:] を作成して画像を表示し、同じ画像を表示する必要があるビュー #2 に移動しますが、2 つのビュー間で Bean を渡すだけなので、UIImage を再作成します。 [UIImage imageWithData]で。

これを行うと、CPU やメモリが多すぎるのではないかと考えています...自分でキャッシュを管理する必要がありますか? これは CoreData の非常に一般的なユースケースかもしれないと思うので、これを処理するための一般的なパターンはありますか?

4

2 に答える 2

2

imageWithData は画像をキャッシュしません (ドキュメントによると、キャッシュする唯一の UIImage メソッドは imageNamed です)

ただし、画像をキャッシュするためのアルゴリズムは次のとおりです。

于 2013-09-04T03:27:15.887 に答える
2

あなたの質問への回答でimageWithDataは、少し遅いので、おそらくこれをあちこちでやりたくないでしょう。おそらく、最大のパフォーマンスを得るためにキャッシュを実行する必要があります (または、少なくとも、アプリとの特定のセッション中に繰り返される同じ画像を取得する可能性がある場合)。NSCache、HalR が提案したように、そのための優れたソリューションです。

さらに、画像が巨大な場合、それらを CoreData に保存するのではなく、Documents フォルダーに保存し、ファイル名のパスのみを CoreData に保存することをお勧めします。imageWithDataデータベースから画像を取得してからis を使用する方が、 を使用するよりもはるかに遅いのは驚くべきこと imageWithContentsOfFileです。確かに、キャッシュを行っている場合は、このパフォーマンス ヒットの頻度は低くなりますが、それでも、多数の個別の画像を取得している場合は、違いが観察できます。ただし、サムネイル画像を使用すると、それほど問題になりません。誰もがこの線を別の場所に引きますが、私にとっては、画像がそれぞれ 100kb を超える場合 (または画像検索を頻繁に行う場合)、ドキュメント アプローチを使用します。

于 2013-09-04T03:52:12.377 に答える