我们都知道,在Swift的传统并发中,如果你在一个类中执行(例如)一个网络请求,在完成该请求时,你引用了一个属于该类的函数,你必须传入[weak self]
,如下所示:
func performRequest() {
apiClient.performRequest { [weak self] result in
self?.handleResult(result)
}
}
这是为了阻止我们在闭包时强烈捕获self
个,并导致不必要的保留/无意中引用已经从内存中丢失的其他实体.
使用async/await怎么样?我在网上看到了相互矛盾的事情,所以我将向社区发布两个例子,看看你对这两个方面的看法:
class AsyncClass {
func function1() async {
let result = await performNetworkRequestAsync()
self.printSomething()
}
func function2() {
Task { [weak self] in
let result = await performNetworkRequestAsync()
self?.printSomething()
}
}
func function3() {
apiClient.performRequest { [weak self] result in
self?.printSomething()
}
}
func printSomething() {
print("Something")
}
}
function3
很简单——老式的并发意味着使用[weak self]
.