2016-04-28 36 views
1

我想知道到底發生了什麼,當你不使用cellForRowAtIndexPath方法中的dequeueReusableCellWithIdentifier。 在我合作的一個項目中,我們有不同類型的自定義UITableViewCells,它們都出現在一個tableview中。所以我們在這裏填充所有應該顯示的TableCells的數組。這些數組不是很大(10-15個單元格),所以對於我們來說,即使沒有使用任何標識符dequeueReusableCellWithIdentifier,這種方式也可以工作。接下來的問題是如何在所有你可以使用標識符resp。在UITableView的單個部分中使用不同的單元格時,使用dequeueReusableCellWithIdentifier。這裏有人可以解釋,背景中究竟發生了什麼?問候尼爾斯UITableView使用dequeueReusableCellWithIdentifier還是不行?

+0

這對你背景中發生的事情有影響嗎?我的意思是它,因爲你可以很容易地打破錶視圖單元格緩存,但你的問題似乎無關如何出列工作,更多關於如何使用標識符? – Wain

+1

這是關於「重用」的一切。這是該方法名稱中的重要部分。它允許重用已經不在屏幕上的單元,而不是每次重新分配一個新單元。換句話說:保存CPU,內存(緩存系統)等。 – Larme

+0

這是對的Wain。在上述情況下,我們不使用標識符,因爲我們根本不知道如何在一節中使用不同的自定義單元格。你有什麼建議嗎? –

回答

4

dequeueReusableCellWithIdentifier是讓我想起Flyweight pattern
由於單元的分配和實例化可能是一項昂貴的任務,因此使用此機制您只能創建第一個可見單元格,並稍後重新使用它們只是更改其內容。滾動動畫必須儘可能快以給用戶提供良好的體驗。
值得嗎?是的,它基本上是免費的,我們只需要注意一些舊數據可以仍然存在於一個新的可視化中,訣竅是始終正確實施方法-prepareForReuse(),在這裏,最終可以在設置之前清除所有顯示的數據新的一個。

如果你想在同一節中使用不同的單元格是完全可能的,如果他們有不同的高度。您只需要創建不同的單元格標識符,每個單元格一個,並將它們與您的數據以某種方式聯繫起來。
我通常會映射要在struct(swift)或詞典中顯示的數據以及要使用的單元標識符的鍵。
如果您的細胞類型在滾動時代表自己,您應該使用dequeue

相關問題