ios - dequeueReusableCell 方法返回新的或可重用的对象?

标签 ios uitableview

无法理解 UITableview 对“dequeueReusableCell”方法的调用。 UITableview 中的 dequeue 过程是如何发生的? 我们是获得可重复使用的电池还是总是获得新电池?

最佳答案

这真的是一个非常简单的机制。当您通过调用 dequeueReusableCelltableView(或 collectionView)请求可重用单元格时,只有两种情况:

  1. 队列中没有可以返回的可重复使用的单元格(所有现有单元格都是可见的,因此不能重复使用)- tableView 必须通过调用 创建一个新单元格>init(style: UITableViewCellStyle, reuseIdentifier: String?) 并返回这个新的单元格实例。

  2. 一些之前被同一个reuseIdentifier注册的可见单元格之前已经离开了屏幕,现在在队列中等待。 tableView 可以返回这个已经至少使用过一次的单元格,并且不必创建新实例(实例化新单元格在性能方面效率较低)。

非常简单 - 您唯一需要意识到的是,当 tableView 被保留时,它会保留作为可重用单元格出队的单元格。所以当一些可重复使用的单元格离开屏幕时,它不会被释放但仍然存在于内存中,tableView 将它保存在一个队列中,以便下次调用 dequeueReusableCell 时可以返回它

现在如果你意识到这一点,你也应该意识到,如果你在离开屏幕后不清理你的资源,那么你以后可能会遇到一些丑陋的问题 - 例如,在单元格上调用异步大图像下载可以只有在单元格被重复使用后才能完成 - 旧图像将显示在应该显示新图像的单元格上。都是因为你没有在prepareForReuse中取消下载。

关于ios - dequeueReusableCell 方法返回新的或可重用的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48893417/

相关文章:

android - 修复 Flutter 中的 Unicode 渲染

iphone - iOS - 动画效果 - 图片弹出

swift - 使 UITableViewCell 着色为特定百分比

ios - 在UITableViewCell中为detailTextLabel添加右边距

iphone - iOS 开发 : After updating my iPhone 4 to iOS 4. 3 Beta 3,我的应用程序显示 "This game is not recognized by Game Center"

ios - 输入一个 Autocomplete TextField 会弹出另一个 Autocomplete TextField TableView

ios - 带有 Retina-Tiles 的 MKTileOverlay

ios - 在 Swift 中一致地 append 值

ios - 添加 xib 作为 View 以在编辑模式下覆盖自定义 UITableViewCell