2

に配置したいオブジェクトが約5,000個ありますUITableView。私は現在、格納されている配列から最初の50個を取り出し、それらを別の配列にコピーしてから、その配列をtableViewにロードするメカニズムを介してこれを行っています。willDisplayCell:forRowAtIndexPath次に、テーブルが最後から2番目のセルに到達したときに、次の50を自動的にロードするために使用します。これは、以前にコピーを停止した場所を追跡するだけでこれを行い、次の50をコピーして、プロセスを繰り返します。

これは、まだ解決していない問題を引き起こします。たとえば、3番目の50をロードするときに、最初の50をアンロードする必要があります。したがって、0から50、次に50から100、次に100から150、そしてその時点で、0-50を削除する必要があります。ユーザーがリストの一番上にスクロールして戻る場合は、前の50を再度ロードする必要があります。基本的に、テーブルには一度に150を超えるエントリがないため、0-150、または50-200、または100-250、または150-300などになります。

私が疑問に思っているのは、これがこのようなものにアプローチするための最良の方法であるかどうかです。ユーザーがテーブルの最後までスクロールするときの速度低下の問題はありませんが、データの非同期ロードのようなものがより良いかどうか疑問に思っていますか?私はマルチスレッドに本当に慣れていませんが、それがより単純な方法になるのであれば、試してみたいと思います。

これがより意見に基づいた質問であることが問題にならないことを願っています。おそらく1つの決まった答えはないことを理解していますが、「実際の質問ではない」場合、私の質問は次のとおりです。上記のアプローチが最も効率的であり、大量のデータを徐々にロードする効果的な方法でUITableViewあり、マルチスレッド、遅延ロード、またはその他の手法を介して同様の効果を達成するためのより一般的な方法はありますか?

編集:セルの大部分には画像が含まれておらず、それらはほんの数例にすぎないことも指摘しておきUILabelます。

4

1 に答える 1

1

なぜ別のアレイを作成するのですか?5000個のオブジェクトがすでに配列に含まれている場合は、それらのスライスをコピーしてテーブルセルとして再作成します(IMHO)。それらはすでにメモリ内にあります。セルをレンダリングする前に、何らかの変換を行う必要があるのでしょうか。

データがすでにメモリにある場合は非同期ロードを作成しても大きな違いはなく、データと最終レンダリングの間でCPU/IOを集中的に使用するタスクは実行されません。巻物が正しいと感じれば、私は可能な限り速いと思います。

もう1つのことは、データ(元の配列を作成するデータ)がディスク/ネットからのものであるか、CPU/集中的な変換であるかどうかです。大きな利益を得ることができる場所があります。

于 2013-02-22T15:08:05.043 に答える