Apple は 1 週間前に、UITableView で画像を遅延読み込みするサンプル コードをいくつかリリースしました。私はそれをチェックアウトし、自分の UITableView (高速スクロール用の drawRect です) に実装して、既に行っていたこととの違いがあるかどうかを確認しました。
実装した後、何が最適かわかりません。新しいコードまたは私がすでに持っていたもの。私の 3GS では速度の向上はあまり見られません。
「サンドボックス」方式: 画像を遅延ロードし、サンドボックスのローカル tmp フォルダーに保存します。セルが表示されるたびに、そのファイル名の画像が既にサンドボックス フォルダーにあるかどうかが検索されます。そうである場合は、画像を取得して表示します。そうでない場合は、ダウンロードを続行し、ローカルに保存してから表示します。これの利点は、アプリを 2 回目に開いたときに画像が空白にならないことです。それらはすでにダウンロードされており、表示する準備ができています。
キャッシング方法: これも画像を遅延ロードしますが、テーブルビューに表示される配列内の各オブジェクトに UIImage を含めます。画像をローカルに保存する代わりに、画像をダウンロードしてオブジェクトの配列に配置します。ここで、毎回ファイル名をチェックする代わりに、UIImage != nil であるかどうかをチェックし、キャッシュされたイメージを使用します (または nil の場合はダウンロードします)。
小さな違いは、キャッシュ コードがセルに表示される正確なサイズに画像をキャッシュする前にサイズを変更することです。一方、サンドボックス コードの例で使用されている画像は、実際には表示に必要なサイズよりも少し大きいため、スクロールするときもその場でサイズを変更する必要があります。数か月前に、これを行うには少し費用がかかる可能性があることを読みました。また、サンドボックスに保存されたイメージの代わりにキャッシュされたイメージを使用するという点で大きな違いがあるかどうかもわかりません。上記のキャッシュコードでキャッシュから保存したものに)。
私の質問は、キャッシュコードを気にする必要があるかどうかだと思いますか? 繰り返しますが、新しいコードは新しい起動時に画像をすぐにロードしませんが、古いコードは既にサンドボックスにあるため、実際にロードします。私は画像を再利用していないので、(サンドボックスまたはキャッシュから)ロードする画像がたくさんあるので、速度に大きな違いはありません。実際、私の意見では、私の 3GS でそれを判断することはほとんど不可能です。スクロールは滑らかではありません。これは、再利用できない画像が大量にあるためだと思います (セルごとに異なる画像)。また、フォルダーに1000以上の画像があると、サンドボックスメソッドが遅くなるかどうかも疑問に思っています。たとえば、最終的には100個程度よりも多くの画像を調べます。
私が理にかなっていることを願っています。詳細についてはかなり徹底したかったので、必要に応じて詳細をお知らせします。
ありがとう!