2016-04-28 11 views
1

cellForRowAtIndexPathメソッドでdequeueReusableCellWithIdentifierを使用しないと、何が起きているのだろうかと思います。 1つのプロジェクトで私は共同作業をしていますが、すべて異なるUITableViewCellsを1つのテーブルビューに表示します。ここでは、表示する必要があるすべてのTableCellで配列を塗りつぶします。これらの配列はそれほど大きくはありません(10〜15セル)ので、dequeueReusableCellWithIdentifierの識別子を使用しなくても動作します。次の質問は、識別子respをどのように使用できるかです。 dequeueReusableCellWithIdentifierは、UITableViewの1つのセクションで異なるセルを使用する場合に使用します。ここに誰かが説明することができます、正確に何がバックグラウンドで起こるか?よろしくNilsUITableViewはdequeueReusableCellWithIdentifierを使用しているかどうかを確認します。

+0

バックグラウンドではどうなりますか?あなたはテーブルビューのセルキャッシュをかなり簡単に分解することができますが、デキューの仕組みや識別子の使い方とは無関係のようです。 – Wain

+1

「再利用」はすべてです。それがそのメソッド名のインポート部分です。これは、毎回新しいセルを再割り当てするのではなく、画面外だったセルを再利用することを可能にする。言い換えれば:CPU、メモリ(キャッシュシステム)などを節約する – Larme

+0

それは正しいWainです。我々は、一つのセクションに異なったカスタムセルがどのようにあるのかを知りませんので、上記のケースでは識別子を使用しません。何か提案はありますか? –

答えて

4

dequeueReusableCellWithIdentifierは私にFlyweight patternを思い出させるものです。
セルの割り当てとインスタンス化は高価なタスクになる可能性があるため、このメカニズムを使用すると、最初に表示されたセルのみを作成し、その後、内容を変更するだけで再利用できます。スクロールアニメーションは、ユーザーに良い経験を与えるためにできるだけ速くなければなりません。
その価値はありますか?はい、それは基本的に無料で、我々はちょうどいくつかの古いデータがまだ新しい視覚化に存在することができる注意を払う必要があります、トリックは常に-prepareForReuse()メソッドを実装することです、ここで、新しいもの

同じセク​​ション内の異なるセルを使用する場合は、高さが異なる場合でも絶対に可能です。あなたはちょうど各セルのために1つと、あなたのデータと一緒に何とかそれらを結びつけて、別のセル識別子を梱包する必要があります。
私は通常、struct(swift)または辞書に表示するデータを、使用するセル識別子のキーとともにマップします。
スクロール中に自分のタイプのセルが自分自身を表現している場合は、dequeueである必要があります。

関連する問題