解雇期间,软弱,坚强或无主都不会做吗?

时间:2018-08-08 12:21:23

标签: ios swift uikit

这是一种有效的模式,可以避免在解雇后被保留吗?

@objc func backButtonTapped() {
    var s: SiteViewController! = self
    navigationController!.popToRootViewController(animated: true, completion: {
        s.dismissCompletion()
        s = nil // break the strong reference to self
    })
}

3 个答案:

答案 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()
       } 
   })
}

这将确保不会有任何保留。