gpt4 book ai didi

ios - 为了简单的操作而避免[弱 self ]?

转载 作者:行者123 更新时间:2023-12-02 07:51:15 27 4
gpt4 key购买 nike

对于短期运行的操作,避免[weak self]是否可以接受?例如,URLSession 将保留 dataTask(with:completion:) 的闭包:

final class ViewController: UIViewController {
let label = UILabel()

override func viewDidLoad() {
super.viewDidLoad()
URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data else { return }
let decodedString = String(bytes: data, encoding: .utf8)

DispatchQueue.main.async {
self.label.text = decodedString
}
}.resume()
}
}

在这种情况下,闭包强烈捕获self,这意味着即使这个ViewController被闭包保存在内存中。 URLSession 将保持闭包,直到数据任务完成,这意味着 ViewController 的生命周期可能会延长,直到 dataTask 完成。

在这种情况下,我们应该使用捕获列表来避免这种行为吗?我的推理是否正确,这里没有引用循环?

最佳答案

the life cycle of the ViewController can potentially be extended until dataTask completes

所以问题是这是否连贯。这甚至可能是一件好事。如果可以,那就没问题了,并且不需要 weak self,因为没有保留周期,因为url session 是共享的。

但是当url session是一个实例时 属性(property)并且有一个真正的代表,事情要复杂得多并且 您确实可以获得保留周期,因为 session 保留其委托(delegate),该委托(delegate)可能正在保留 session 。

关于ios - 为了简单的操作而避免[弱 self ]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60264290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com