2011-03-03 22 views
6

我有一个UITableView控制器和UITableView。我有一切使用代表等设置,它填充罚款。我注意到一个小bug但是用下面的方法:UITableView:cellForRowAtIndexPath继续被称为

:的cellForRowAtIndexPath

我注意到,这种方法被称为不断每次我滚动表的时间。即使在表填充之后,它仍会继续呼叫。基本上,一个小区移出视野,当它回来时,它再次调用它。我让NSLog打印出该方法中的单元格内容,这是我知道它继续调用的方式。

该功能不应该只是每个单元调用一次,填充它,然后做?

回答

8

没有。每当需要一个单元格时都会调用它,并且每次渲染时都需要一个单元格。

UITableView是一个非常聪明的小生物。它实际上只保留它显示的单元格,再加上一两个或三个以上的缓存。当需要滚动一个没有打开的单元格时,可以从缓存中请求单元格,如果有单元格,它将被重用。

这样巨大的数据集可以显示在UITableView中,因为在内存中确实没有大量的单元,只有屏幕上的单元和小缓存。

+0

谢谢,非常有道理。只是想确保我没有造成一些疯狂的循环哈哈。 – Chris 2011-03-08 07:22:53

0

这是正确的行为。它与UITableViewCells的出队有关。这就是为什么电池重复使用很重要。这种方式理想情况下是有限的,少量内置内存,不断得到重用。

查看the docs了解更多信息和代码示例。