我知道我们可以在代码中直接调用DispatchQueues中的strong self,例如:
func foo() {
DispatchQueue.global().async {
print(self.someProperty)
}
}
但是如果我将自定义队列保留在类中怎么办?我应该使用
weak self
还是它的作用是一样的并且无需担心泄漏?
class MyClass {
let queue = DispatchQueue(
label: "MyQueue",
qos: .userInitiated
)
func foo() {
queue.async { [weak self]
guard let self else { return }
print(self.someProperty)
}
}
}
在这种情况下,我的自定义队列存储在类变量中,也许我应该使用
weak self
。还是不?
queue.async
闭合确实保留了 self
而没有 [weak self]
。然而,它是暂时的,出队后它会立即消失。所以这里没有保留周期。
AFAIK,它更像是数据流而不是保留周期。
[weak self]
:您可能想尽早退出范围。[weak self]
:你想在块执行后保留对象。