UITableViewに約50個のカスタムセルがあります。 URLから画像を取得するセルに画像とラベルを表示したい。
画像の遅延読み込みを実行して、画像の読み込み中にUIがフリーズしないようにしたい。別のスレッドで画像を取得しようとしましたが、セルが再び表示されるたびに各画像をロードする必要があります(そうでない場合、セルを再利用すると古い画像が表示されます)
Facebookのようなアプリは、現在表示されているセルの画像のみをロードします。画像がロードされると、再度ロードされることはありません。誰かがこの動作を再現する方法を教えてください。
ありがとう。
編集する
NSMutableDictionaryオブジェクトに画像をキャッシュしようとすると、ユーザーが高速でスクロールしたときに問題が発生します。スクロールが完全に停止し、メモリ警告のキャッシュをクリアした場合にのみ画像が表示されます。ただし、アプリは必ずメモリ警告を受け取り(キャッシュされる画像のサイズのため)、再ロードする前にキャッシュをクリアします。スクロールが非常に速い場合、クラッシュします。
他の提案は大歓迎です
バックグラウンドスレッドで画像を読み込むことは、まだ良い考えです。毎回それらをリロードしたくない場合は、NSMutableDictionaryを設定してそこに画像を保存することをお勧めします。各画像のキーとして、行IDや画像の名前などの一意の識別子を使用できます。
セルをロードするときに、objectForKey:メッセージをNSMutableDictionaryに送信して、その特定のセルの画像を取得します(セルの一意のキーに基づく)。それがnilを返す場合、それは画像がキャッシュから欠落していることを意味し、取得するためにバックグラウンド画像読み込みスレッドが必要です。それ以外の場合は、表のセルを表示するための適切な画像が返されます。メモリの警告時に、悪影響を与えることなく、このイメージのキャッシュをクリアできます(必要に応じて、イメージの再読み込みを強制することは別として)。
カスタムNSOperationを使用して画像をキューイングモードでロードし、静的なNSMutableDictionaryにキャッシュとして保存することで、同じ問題にうまく対処したところです。以下は、問題を解決するために使用したコードの基礎へのリンクです。
フォーラムのすべてのスレッドを読んで、実際に何が起こっているのかを理解するのに最適です。
lostInTransit、
私は同様の問題を抱えており、さまざまな可能な解決策を模索しているときに、このブログ投稿を見つけました:
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/
調査結果も共有してください。
遅延読み込みは同期タイプのリクエストに似ています。つまり、応答を待ちます
エゴ画像ボタンはそのためのソリューションです。
エゴ画像ボタンは非同期タイプのリクエストです。応答を待機しないでください。一度にデータを表示するだけです...
githubからフォルダをダウンロードできます。
プロジェクトに追加...
xib..at画像ビューで、クラスを自我画像ボタンに変更...
そのオブジェクトをmファイルに作成...
使用できます...
興味があり、私のような怠惰な人のために、UIImageView画像の遅延/キャッシュネットワークのオープンソース(MITライセンス)実装を提案したいと思います。 SDWebImage
これは Tutorial UITableViewCellに画像を遅延ロードする方法を示す例を含むNSOperationについてです
画像キャッシュとバックグラウンドスレッドでのサイズ変更/設定を備えたUITableView:
http://blog.slaunchaman.com/2011/08/12/gcd-example-updated-now-with-more-speed/