是否应该在闭包中显式指定“self”,并在捕获列表中弱引用 self?

问题描述 投票:0回答:1
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 是否足够聪明,能够自动以正确的方式处理此类事情?

swift memory-management automatic-ref-counting
1个回答
0
投票

DispatchQueue
闭包不会引起循环引用,所以可以直接使用
self
,不需要使用
[weak self]

© www.soinside.com 2019 - 2024. All rights reserved.