gpt4 book ai didi

ios - ARC 保留周期、Grand Central 调度和关闭

转载 作者:行者123 更新时间:2023-11-28 11:30:49 26 4
gpt4 key购买 nike

我了解如果您将闭包分配给属性,例如:

var someClosure : () -> Void?
let someConstant : Int = 5

然后通过引用 self 从其类的 init 中调用该闭包:

someClosure = { print(self.someConstant) }

那么这将导致一个保留循环,所以我应该使用 weak 来避免它。

但我无法理解以下来自 raywenderlich.com tutorial 的代码:

DispatchQueue.global(qos: .userInitiated).async { [weak self] in
guard let self = self else {
return
}
self.someFunction()

}

为什么这里存在循环引用——因为我们没有创建从 View 到闭包的引用(即,将闭包保存为属性),而只是从闭包到自身;它不应该保持无循环吗?

最佳答案

你是对的,雷是错的:

Grand Central Dispatch 关闭不会导致保留循环。

可以删除

<罢工>

<罢工>
[weak self] in

guard let self = self else {
return
}

<罢工>

另请参阅 https://digitalleaves.com/blog/2015/05/demystifying-retain-cycles-in-arc/

关于ios - ARC 保留周期、Grand Central 调度和关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56760525/

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