ビューに表示されているボタンごとにUIButtonのインスタンスが1つ必要になるのと同じように、表示されている行ごとにセルのインスタンスが1つ必要になります。
これを管理するための一般的なパターンは、テーブルビューに、以前にインスタンス化された不要になったセル(dequeueReusableCellWithIdentifier:
)を要求してから、そのセルを返すことです。テーブルビューに再利用可能なセルがない場合は、nibファイルから新しいセルをインスタンス化する必要があります。
ウェブ上にはこれに関する多くの例があります、そしてあなたはまたここSOでいくつかを見つけることができます、例えばこの答えで。
Apples TableViewプログラミングガイドを読むことをお勧めします。このガイドには、ペン先からのセルのロードに関するセクションも含まれています。
更新:TableViewとセルの再利用を別の方法で説明する試み。
古い絵画のある大きなギャラリーがあるとしましょう。何千もの絵画。ただし、ギャラリーには展示室が1つだけあり、壁には10枚の絵画しかありません。ギャラリーマネージャーは、訪問者が退屈して新しい絵画を見たいと思ったときに、時々絵画を切り替える必要があります。
表示されるすべての絵画にはフレームが必要です。フレームがないと壁に貼れません。フレームは作るのに費用がかかり、多くのスペースを占有します。フレームメーカーの人は、必要な数千のフレームを構築するための時間もお金も必要としません。
彼は、現在表示されていないすべての絵画のフレームが必要であることに気付きました。彼は現在表示されている絵画のために10フレームしか必要としません。ギャラリーマネージャーが絵を降ろすと、フレームメーカーがフレームを保存し、ギャラリーマネージャーが新しい絵を置いてフレームメーカーにフレームを要求すると、フレームメーカーは前の絵のフレームを再び返します。
ある日、絵画の間の必要なスペースの規制は、正当な理由もなく変更されます。ギャラリーマネージャーは、展示室にさらに2枚の写真を置くことができます。彼は物置から2枚の絵を選び、額縁メーカーに額縁を依頼します。フレームメーカーには予備のフレームがなく、2つの新しいフレームを作成する必要があります。
ここで、ギャラリーがTableViewであり、すべての絵画がデータの行であるとしましょう。目に見える10枚の絵画のためのスペースがある展示室は、10列の目に見える列のためのスペースがあるスクリーンです。表示されている各絵にフレームが必要なのと同じように、表示されている各行にはセルが必要です。
結局、1つのセルを再利用してリソースを節約することについてはそれほど気にする必要はありません。それがTableViewsの責任です。これは、TableViewの実装の詳細であり、必要なセルの数とその使用方法です。プロトコルは、TableViewに再利用可能なセルを要求する方法を定義し、ドキュメントには、再利用する必要があると記載されています。それで十分なはずです。デモプロジェクトは、TableViewが非常に大量のデータを管理できることを示しています。nibから10〜20個のセルをインスタンス化するためにプロジェクトでパフォーマンスが低下する場合は、nibファイルなどで問題が発生している可能性があります。ただし、 nibからのロードとコードでのセルの構築のパフォーマンスについてはいくつかの議論があります。それはあなたにとって興味深いかもしれません。