无法理解 UITableview 对“dequeueReusableCell”方法的调用。 UITableview 中的 dequeue 过程是如何发生的? 我们是获得可重复使用的电池还是总是获得新电池?
最佳答案
这真的是一个非常简单的机制。当您通过调用 dequeueReusableCell
向 tableView
(或 collectionView
)请求可重用单元格时,只有两种情况:
队列中没有可以返回的可重复使用的单元格(所有现有单元格都是可见的,因此不能重复使用)-
tableView
必须通过调用创建一个新单元格>init(style: UITableViewCellStyle, reuseIdentifier: String?)
并返回这个新的单元格实例。一些之前被同一个
reuseIdentifier
注册的可见单元格之前已经离开了屏幕,现在在队列中等待。tableView
可以返回这个已经至少使用过一次的单元格,并且不必创建新实例(实例化新单元格在性能方面效率较低)。
非常简单 - 您唯一需要意识到的是,当 tableView
被保留时,它会保留作为可重用单元格出队的单元格。所以当一些可重复使用的单元格离开屏幕时,它不会被释放但仍然存在于内存中,tableView
将它保存在一个队列中,以便下次调用 dequeueReusableCell 时可以返回它
。
现在如果你意识到这一点,你也应该意识到,如果你在离开屏幕后不清理你的资源,那么你以后可能会遇到一些丑陋的问题 - 例如,在单元格上调用异步大图像下载可以只有在单元格被重复使用后才能完成 - 旧图像将显示在应该显示新图像的单元格上。都是因为你没有在prepareForReuse
中取消下载。
关于ios - dequeueReusableCell 方法返回新的或可重用的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48893417/