33

UITableViewに約50個のカスタムセルがあります。URLから画像を取得するセルに画像とラベルを表示したい。

画像の読み込み中にUIがフリーズしないように、画像の遅延読み込みを実行したいと思います。別々のスレッドで画像を取得しようとしましたが、セルが再び表示されるたびに各画像をロードする必要があります(そうでない場合、セルを再利用すると古い画像が表示されます)

Facebookなどのアプリは、現在表示されているセルの画像のみを読み込みます。画像が読み込まれると、再度読み込まれることはありません。誰かがこの動作を複製する方法を教えてもらえますか?

ありがとう。

編集
NSMutableDictionaryオブジェクトに画像をキャッシュしようとすると、ユーザーが高速でスクロールすると問題が発生します。スクロールが完全に停止し、メモリ警告でキャッシュをクリアした場合にのみ画像が表示されます。ただし、アプリは常にメモリ警告を受け取り(キャッシュされている画像のサイズが原因で)、リロードする前にキャッシュをクリアします。スクロールが非常に速い場合、クラッシュします。

他の提案は大歓迎です

4

7 に答える 7

19

バックグラウンド スレッドに画像をロードすることは、依然として良い考えです。毎回リロードしたくない場合は、NSMutableDictionary を設定してそこに画像を保存することをお勧めします。各画像のキーとして、行 ID や画像の名前などの一意の識別子を使用できます。

セルをロードするときは、 objectForKey: メッセージを NSMutableDictionary に送信して、その特定のセルの画像を取得します (一意のキーに基づいて)。nil が返された場合は、画像がキャッシュにないことを意味し、バックグラウンド画像の読み込みスレッドを取得する必要があります。それ以外の場合は、表のセルに表示する適切な画像が返されます。メモリの警告が表示された場合は、イメージのキャッシュを消去しても悪影響はありません (必要に応じて強制的に再読み込みすることは別として)。

于 2009-02-10T14:00:39.443 に答える
4

カスタム NSOperation を使用して画像をキューイング ファシオンにロードし、それらを静的な NSMutableDictionary にキャッシュとして保存することで、同じ問題にうまく取り組みました。以下は、問題を解決するために使用したコードの基礎へのリンクです。

UITableViewCell のリモート画像を読み込んでいます

実際に何が起こっているのかを理解するために、フォーラムのすべてのスレッドを読むことをお勧めします。

于 2009-02-11T12:45:21.647 に答える
4

輸送中の紛失、

私は同様の問題を抱えており、さまざまな解決策を検討しているときに、次のブログ投稿を見つけました。

davidgolightly.blogspot.com/2009/02/asynchronous-image-caching-with-iphone.html

Apple 開発者の Web サイトから URLCache サンプルをダウンロードすることもお勧めします。

developer.apple.com/iphone/prerelease/library/samplecode/URLCache /

そして、ここに問題に関する別の投稿があります:

www.markj.net/iphone-asynchronous-table-image/

発見も含めて教えていただければ幸いです。

于 2009-05-25T17:37:10.187 に答える
3

遅延読み込みは同期型リクエストのようなものです..応答を待つことを意味します

エゴ画像ボタンはそのためのソリューションです..

エゴ画像ボタンは非同期型のリクエストです..応答を待たずに..一度にデータを表示するだけです....

githubからフォルダーをダウンロードできます....

プロジェクトに追加...

xib..画像ビューで、クラスをエゴ画像ボタンに変更します...

mファイルでそれのオブジェクトを作成します...

あなたが使用することができます.....

于 2014-09-16T08:42:08.273 に答える
2

興味があり、私のように怠惰な人のために、UIImageView 画像の遅延/キャッシュ ネットワークのオープン ソース (MIT ライセンス) 実装を提案したいと思います: SDWebImage

于 2011-11-16T23:50:09.810 に答える
0

バックグラウンドスレッドで画像のキャッシュとサイズ変更/設定を行う UITableView:

http://blog.slaunchaman.com/2011/08/12/gcd-example-updated-now-with-more-speed/

于 2012-05-13T21:55:36.113 に答える