Bre*_*ung 1 closures initialization swift
我只是在类中使用延迟初始化来尝试属性,这是我的代码:
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*
Run Code Online (Sandbox Code Playgroud)
我试图找出如果我没有放入[unowned self] in闭包,类会取消初始化,我期望它不会运行该deinit{}方法,因为会有一个保留周期,但事实证明它确实在事实去初始化。难道不应该有一个保留周期吗?
更新
我的大脑告诉我的是:由于闭包引用 self 并且类引用了闭包(因为它位于类的主体内部),因此如果我没有像我[unowned self]设置的那样放置Brendon = nil,则闭包是保持Brendon实例存活。因此,保留周期,我是对的吗?
在此代码中:
lazy var greeting: String = {
return "Hello, my name is \(self.firstName)"
}()
Run Code Online (Sandbox Code Playgroud)
...没有保留的封闭。注意(). 与其他函数一样,这只是一个函数;它被调用,而不是被存储。greeting是一个字符串,而不是一个存储的闭包。
| 归档时间: |
|
| 查看次数: |
292 次 |
| 最近记录: |