DispatchQueue和[弱自我] workItems。 [弱自我]是否必要?

时间:2019-05-29 17:28:40

标签: swift

我有一个使用DispatchQueue的自定义类。

class MyCustomClass {

    func fetch(fromURL url: URL) {
        DispatchQueue.global().async { [weak self] in 
            // workItem stuff where self? is called
        }
    }

}

[弱自我]是否必要? workItem闭包引用了MyCustomClass的实例,所以我看到了很强的引用,但是MyCustomClass的实例是否保留对传递给async()的封闭的workItem块的引用?似乎不是,所以在这种情况下[弱自我]是不必要的吗?

2 个答案:

答案 0 :(得分:3)

  

但是MyCustomClass实例是否保留对传递给async()的封闭workItem块的引用?

不是这个例子中的,不是。

但是,如果MyCustomClass实例具有一个DispatchQueue而不是全局队列,那么它将强烈引用工作时间直到完成。

答案 1 :(得分:2)

不,不需要单身DispatchQueue.global()

DispatchQueue.global().async

self的引用不强,GCD不会引起保留周期