0

に表示されるリモートでダウンロードした画像を保存するために、カスタム NSCache を実装しましたUITableViewCells。画像は非同期でダウンロードされていることに注意してください。

ただし、上下にすばやくスクロールすると、画像がローカルのものであっても、画像が更新されていることがわかります。さわやかな問題を回避する方法を理解するのを手伝ってくれる人はいますか?

4

2 に答える 2

1

で画像を更新する必要があるため、tableView セルを再利用することをお勧めしますcellForRowAtIndexPath。そうしないと、画像が乱れます。

ただし、提案できる最適化がいくつかあります。

  • キャッシュのパフォーマンスを改善して、画像の読み込みを高速化します。

  • セル imageView に画像を追加するときに標準タグまたはカスタム タグをcellForRowAtIndexPath使用し、この式をハッシュ インジケーターとして使用して、セルの画像タグ値をセル インデックス/行番号の組み合わせ (セクション * 1000 + 行など) と比較します。これにより、表示された画像を本当に更新する必要があるかどうかがわかります。おそらく、キャッシュ読み取り操作をいくつか節約できます。

  • ロードされた画像が大きく、サイズ変更されたバージョンを使用してセル上に表示する場合は、サムネイルを個別に保存します。これにより、非常にコストがかかる可能性のあるサイズ変更操作を節約できます。

  • 古い画像がある場合は、キャッシュに既にある画像をリロードしていることを確認してください。また、大量の HTTP 要求によってアプリケーションの表示が遅くなり、バッテリーの消耗が早くなるため、頻繁にチェックを実行しないことも重要です (ステータスバーの迷惑なアクティビティインジケータは言うまでもありません.ユーザーはできるだけめったに見たくないので.

それが役に立てば幸い。


セルが多数ある場合、それらのほとんどは作成されずに再利用されます。任意のセルに でボタンを追加する場合addSubview、再利用されたセルには既にボタンが追加されており、ラベルのテキスト、画像も再利用されます。

この状況では、既存のボタンに新しい画像を設定する必要があるかどうかを確認する必要があります。簡単な方法の 1 つは、セルのセクションと行番号をイメージ タグ (またはセル タグ、ボタン タグなど) に格納することです。式は、1 つの属性に 2 つの数値を格納するために使用されます。再利用する必要があるセルのセクション/行番号を知らせてくれます。

それは常に効果的であるとは限らず、あなたが持っているものと必要なものに応じて、より良い解決策にたどり着くことができます.

于 2012-05-08T17:31:25.907 に答える
0

TableView デリゲートの cellForRowAtIndexPath メソッドで、画像がキャッシュにあるかどうかを確認する必要があります。そうでない場合は、ダウンロードする必要があります。存在する場合は、セルのイメージをキャッシュ内のバージョンに設定する必要があります。キャッシュから画像を取得するのではなく、再ダウンロードしていると思います。

于 2012-05-08T17:22:17.003 に答える