这是一种有效的模式,可以避免在解雇后被保留吗?
@objc func backButtonTapped() {
var s: SiteViewController! = self
navigationController!.popToRootViewController(animated: true, completion: {
s.dismissCompletion()
s = nil // break the strong reference to self
})
}
答案 0 :(得分:2)
您只能在闭包中使用self
。控件从结束符返回后,对self
的引用将被释放。
如果您确实想使用s
,则没有理由将其声明为隐式解包的可选。您可以说var s = self
答案 1 :(得分:1)
此闭包应在执行后立即释放s
。我认为您可以放心self
答案 2 :(得分:-1)
您可以执行以下操作以避免保留,
@objc func backButtonTapped() {
navigationController!.popToRootViewController(animated: true, completion: { [weak self] in
if let strongSelf: SiteViewController = self {
strongSelf.dismissCompletion()
}
})
}
这将确保不会有任何保留。