2011-03-03 21 views
6

我有一個UITableView控制器和UITableView。我有一切使用代表等設置,它填充罰款。我注意到一個小bug但是用下面的方法:UITableView:cellForRowAtIndexPath繼續被稱爲

:的cellForRowAtIndexPath

我注意到,這種方法被稱爲不斷每次我滾動表的時間。即使在表填充之後,它仍會繼續呼叫。基本上,一個小區移出視野,當它回來時,它再次調用它。我讓NSLog打印出該方法中的單元格內容,這是我知道它繼續調用的方式。

該功能不應該只是每個單元調用一次,填充它,然後做?

回答

8

沒有。每當需要一個單元格時都會調用它,並且每次渲染時都需要一個單元格。

UITableView是一個非常聰明的小生物。它實際上只保留它顯示的單元格,再加上一兩個或三個以上的緩存。當需要滾動一個沒有打開的單元格時,可以從緩存中請求單元格,如果有單元格,它將被重用。

這樣巨大的數據集可以顯示在UITableView中,因爲在內存中確實沒有大量的單元,只有屏幕上的單元和小緩存。

+0

謝謝,非常有道理。只是想確保我沒有造成一些瘋狂的循環哈哈。 – Chris 2011-03-08 07:22:53

0

這是正確的行爲。它與UITableViewCells的出隊有關。這就是爲什麼電池重複使用很重要。這種方式理想情況下是有限的,少量內置內存,不斷得到重用。

查看the docs瞭解更多信息和代碼示例。