與您需要爲視圖中每個可見按鈕需要一個UIButton實例的方式相同,每個可見行都需要一個單元實例。
管理此問題的常見模式是向tableview查詢不再需要的以前實例化的單元格(dequeueReusableCellWithIdentifier:
),然後返回該單元格。如果表視圖沒有任何可重用的單元格,則必須從nib文件中實例化一個新的單元格。
網上有很多這方面的例子,你也可以在SO上找到一些例子,例如this answer。
我建議您通讀蘋果TableView Programming Guide,其中還包含section on loading cells from nibs。
更新: 嘗試以不同方式解釋TableView和重用單元格。
可以說我們有一個大型畫廊與 舊畫。成千上萬的畫作。 畫廊只有一個展廳, 雖然,它的牆壁只有十個 繪畫。畫廊經理不得不 開關畫現在時,然後當 遊客感到無聊,並希望看到 一些新的畫。
每個顯示的繪畫需要一個 框架。沒有框架,它不能被 放在牆上。 使框架昂貴,並佔用大量的空間。 幀製造商傢伙想要有時間也沒有 錢建立所需的數千幀 。
他發現他想要 幀的所有作品 目前沒有顯示。他只需要 需要十個框架才能顯示當前的 。當畫廊 經理取下一幅畫中, 框架製造商存儲的框架,並在 畫廊經理提出了一個新的 繪畫,並要求框架製造商爲 它的框架,該框架製造商 從返回框架以前的 再次繪畫。
有一天, 需要空間之間的繪畫規則 得到改變,沒有很好的理由。畫廊經理 能夠在展示廳內放置兩張0更多圖片。他 從商店 房間挑選兩幅畫,並要求框架製造商 幀。幀製造商沒有備用的 幀,並且需要製作兩個新的 幀。
現在,讓我們說畫廊是一個TableView,所有的繪畫都是行數據。有十個可見的繪畫空間的陳列室是屏幕,有十個可見行的空間。每個可見行都需要一個單元格,就像每個顯示的繪畫都需要一個框架一樣。
最後,你不應該在乎重複使用一個單元來節省資源。這是TableViews的責任。這是TableView的實現細節,需要多少個單元以及它如何使用。該協議定義瞭如何向TableView詢問可重用的單元格,並且文檔聲明您應該這樣做。這應該夠了。演示項目顯示TableView可以管理大量的數據。如果您的項目由於從nib實例化10-20個單元而導致性能下降,那麼您的nib文件可能會遇到一些問題或其他問題。有一些討論,但是,關於performance of loading from nib versus building cells in code。這可能對你很有意思。
我已經通過TableView編程指南並按照指南中介紹的從Nib文件加載的靜態單元格的方式進行操作,除了我想要保存資源並使用單個單元格對象,併爲每行使用不同的內容。您所描述的方式與Apple指南中的不同。所以我知道我該怎麼做來解決它,但我不知道爲什麼我不能重複使用同一個單元。答案不在這裏。 – Pablo 2010-07-16 07:36:33
您無法爲所有單元重複使用完全相同的單元格對象。每個可見單元格需要一個實例。但你不應該在意。讓TableView照顧它。請求一個可重用的單元格,如果它返回零,則需要實例化一個新單元格。如果可以通過爲每一行使用相同的單元來節省資源,那麼在第一次調用之後,出隊方法會返回第一個被實例化的單元格。 – Vegar 2010-07-25 22:31:48