Apple が最初の iPhone 用に を開発したUITableView
とき、スクロール時のパフォーマンスに問題がありました。その後、ある賢いエンジニアが、オブジェクトの割り当てには代償が伴うことが原因であることを発見し、セルを再利用する方法を思いつきました。
「オブジェクトの割り当てにはパフォーマンス コストがかかります。たとえば、ユーザーがテーブル ビューをスクロールするときなど、割り当てが短期間に繰り返し発生する必要がある場合は特にそうです。新しいセルを割り当てる代わりにセルを再利用すると、テーブル ビューのパフォーマンスが大幅に向上します。」
出典: iOS リファレンス ライブラリ
使用するセルを再利用するには:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
さて、私が疑問に思っているのは、実際にここで何が起こっているのでしょうか? その識別子を持つセルがあり、それを返すだけの場合、TableView を調べますか? そうですね、しかし、割り当てではなく参照を送信し、同じ識別子を持つ4つのセルがすべて表示されているとしましょう。割り当てずに 4 つのインスタンスに自分自身を増やすにはどうすればよいでしょうか?
私はカレンダータイプのコンポーネントを構築しており、すべてのセルが同じ構造でテキストのみが変更されているため、これを知りたいです。したがって、割り当ての代わりにセルを再利用できれば、パフォーマンスが向上する可能性があると思います。
私自身の理論では、4 つのセルを割り当てるというものです (単純に割り当てられているため)。セルが画面から消えると、TableView 再利用キューに入れられます。新しいセルが必要な場合、同じ識別子を持つセルが利用可能かどうかをキューで調べ、prepareForReuse
そのセルでメソッドを呼び出し、キューから自身を削除します。