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 视图,将其添加到父视图,然后将其保存到弱实例变量。如果您尝试直接在弱实例变量中创建可用视图,它将在您将其添加为子视图之前被释放。
我遇到了一些意外的电池回收行为。我有一个带有自定义单元格的 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 视图,将其添加到父视图,然后将其保存到弱实例变量。如果您尝试直接在弱实例变量中创建可用视图,它将在您将其添加为子视图之前被释放。