MonoTouch确定处理细胞

本文关键字:细胞 处理 MonoTouch | 更新日期: 2023-09-27 18:06:33

在我们当前的应用程序中,我们需要在自定义UITableViewCells的Dispose()中执行一些清理。

不幸的是,即使我们调用TableView.Dispose()我们的单元格不会立即被处置。相反,之后,终结器将调用Dispose(false)。由于是由终结器调用的,所以不应该在这里执行清理:对象可能处于不可预测的状态,并且无法确定其发生的时间。

来自Microsoft文档:

当GC检测到对象符合收集条件时调用终结器。

在资源不再需要后的一段不确定的时间内发生。

也:

如果从终结器调用该方法(处置为false),则不应访问其他对象。原因是对象是以不可预测的顺序完成的,因此它们或它们的任何依赖项可能已经完成了。

是否有一个解决方案,我们的自定义单元格的Dispose()方法被调用时tableview被处置?

MonoTouch确定处理细胞

如果在对表本身调用Dispose时确实需要对每个单元格调用Dispose,则需要自己处理:

  1. 子类UITableView。
  2. 将您使用的所有单元格存储在该类的单元格列表中。
  3. 在视图上重写Dispose,并对列表中的每个单元格调用Dispose。

UITableViewCellUITableView重用(缓存)。在表上调用Dispose只删除对该对象的managed引用。但是,可能仍然存在本地对表的引用,这些引用将使单元格存活更长时间。

不清楚需要什么样的清理(在执行终结器时无法完成)。如果它是基本的UI代码(即你的逻辑在其他地方),那么它应该是好的(你可能能够单独处理你的逻辑,仅管理,实例)。