如果UITableViewController在performBatchUpdates完成处理程序中捕获自身,这会导致保留周期吗?

时间:2019-07-08 22:45:07

标签: ios swift uitableview

说我有一个UITableViewController子类,它具有某些功能,例如:

class MyTableVC: UITableViewController {
    func doSomething() { ... }
}

,然后向其中添加一个函数,该函数使用捕获自我的完成处理程序调用{​​{1}}:

performBatchUpdates

是否存在创建保留周期的危险?如果是这样,是否保证视图控制器在回调中不为null?即,如果有保留周期的可能性,我可以使用 func updateStuff() { tableView.performBatchUpdates(someUpdates, completion: { _ in self.doSomething() } } 还是必须使用[unowned self]

1 个答案:

答案 0 :(得分:2)

您的解决方案没有大问题。 self仅保留到批量更新完成为止。而且我可能会做同样的事情,以不使代码复杂化。

通常,最好还是保留weakunowned只是为了在您的项目中保持类似的代码风格。

如果您决定选择其中之一,则weak是这里唯一的安全选项。例如,可以在表执行更新操作时将视图控制器从屏幕上移开并重新分配(机会很小,但仍然存在),这将导致结果崩溃。