DispatchQueue.main.async {
view.setNeedsLayout()
}
通过上面的代码,我们得到了预期的错误: 在闭包中隐式使用“self”;使用“自我”。使捕获语义明确。
众所周知,可以通过这样更新代码来消除错误:
DispatchQueue.main.async { [weak self] in
guard let self = self else { return }
self.view.setNeedsLayout()
}
但是如果我没有明确写“自我”。在访问“视图”之前,闭包会保留对自身的强引用吗?
DispatchQueue.main.async { [weak self] in
guard let self = self else { return }
view.setNeedsLayout()
}
现代的 Swift 是否足够聪明,能够自动以正确的方式处理此类事情?
DispatchQueue
闭包不会引起循环引用,所以可以直接使用self
,不需要使用[weak self]