gpt4 book ai didi

swift - 使用 self 和 unown self 进行延迟初始化,

转载 作者:搜寻专家 更新时间:2023-11-01 06:15:32 24 4
gpt4 key购买 nike

我只是在类中使用惰性初始化试验属性,这是我的代码:

class Person {

let firstName: String

lazy var greeting: String = {

return "Hello, my name is \(self.firstName)"
}()

init(firstName: String){
self.firstName = firstName
}

deinit {
print("deinitialized")
}
}


var Brendon: Person? = Person(firstName: "Brendon")
var greeting = Brendon!.greeting

Brendon = nil //*deinitialized*

我想知道如果我没有将 [unowned self] in 放在闭包中,类是否会取消初始化,我期望的是它不会运行 deinit{} 方法,因为会有一个保留周期,但事实证明它实际上确实取消了初始化。不应该有一个保留周期吗?

更新

我的大脑告诉我的是:因为闭包引用了 self 并且类引用了闭包(因为它在类的主体内),所以如果我没有把 [unowned self],当我设置 Brendon = nil 时,闭包使 Brendon 实例保持事件状态。因此,一个保留周期,我说得对吗?

最佳答案

在这段代码中:

lazy var greeting: String = {
return "Hello, my name is \(self.firstName)"
}()

...没有保留闭包。注意 ()。这只是一个功能,就像其他任何功能一样;它被调用,而不是被存储。 greeting 是一个字符串,而不是一个存储的闭包。

关于swift - 使用 self 和 unown self 进行延迟初始化,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45942584/

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