我应该在自定义存储队列上使用“weak self”吗?

问题描述 投票:0回答:1

我知道我们可以在代码中直接调用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
。还是不?

swift automatic-ref-counting grand-central-dispatch
1个回答
0
投票

queue.async
闭合确实保留了
self
而没有
[weak self]
。然而,它是暂时的,出队后它会立即消失。所以这里没有保留周期。

AFAIK,它更像是数据流而不是保留周期。

  • [weak self]
    :您可能想尽早退出范围。
  • 不带
    [weak self]
    :你想在块执行后保留对象。
© www.soinside.com 2019 - 2024. All rights reserved.