iOS Swift: 准备 collectionView 单元以供重用

iOS Swift: Prepare collectionView cell for reuse

我遇到了一些意外的电池回收行为。我有一个带有自定义单元格的 UICollectionView,每个单元格都包含一个可以显示两种类型的自定义单元格(imageCell 或 movieCell)之一的 UITableView。

回收 collectionView 单元格时自定义 table 视图单元格未正确出列。相反,tableViewCell 类型是从回收的单元格继承的。

override func prepareForReuse() {
    super.prepareForReuse()

    if tableView != nil {
        tableView = nil
    }
}

我应该做些什么不同的事情?

正如@nhgrif 在其现已删除的 post 中所说的那样,您的代码没有多大意义。 (怎么删了?)

我建议不要在每次回收集合视图单元格时删除 table 视图并重新创建它。 Table 视图是大型复杂对象,创建和销毁它们的成本非常高。

相反,保持 table 视图不变并简单地向它发送 reloadData 消息。然后它应该重新加载新内容。

如果您 想每次创建和销毁 table 视图,请将用于存储 table 视图的实例变量设为弱可选变量。然后简单地从它的超级视图中删除 table 视图。这将导致它被释放。

如果您使 table 视图变量成为弱可选变量,则需要在强局部变量中创建 table 视图,将其添加到父视图,然后将其保存到弱实例变量。如果您尝试直接在弱实例变量中创建可用视图,它将在您将其添加为子视图之前被释放。