在我们当前的应用程序中,我们需要在自定义UITableViewCells的Dispose()中执行一些清理。
不幸的是,即使我们调用TableView.Dispose(),我们的单元格也不会立即被处理掉。相反,稍后,终结器将调用Dispose(false)。 由于我们被终结器调用,所以我们不应该在这里执行清理:对象可能处于不可预测的状态,并且它的发生时间无法确定。
来自Microsoft文档:
当GC检测到对象符合收集条件时,将调用终结器。这种情况发生在不再需要资源之后的某个未确定的时间段内。
还有:
如果从终结器调用该方法(disposing为false),则不应访问其他对象。原因是对象以不可预测的顺序最终确定,因此它们或它们的任何依赖项可能已经完成。
是否有解决办法在处理tableview时调用自定义单元格的Dispose()方法?
答案 0 :(得分:1)
UITableViewCell
由UITableView
重复使用(缓存)。在表上调用Dispose
只会删除对象的托管引用。 Iow可能仍然存在对表的原生引用,这将使单元保持更长时间。
目前尚不清楚需要进行何种清理(执行终结器时无法完成)。如果它是基本的UI代码(即你的逻辑在其他地方)那么它应该没问题(你可能能够处理你的逻辑,仅管理,实例)。
答案 1 :(得分:1)
如果你真的需要在桌面上调用Dispose时在每个单独的单元格上调用Dispose,你需要自己处理: