我只是在类中使用延迟初始化来尝试属性,这是我的代码:
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而且类有一个对闭包的引用(因为它在类的主体内),所以如果我没有放{{1当我设置[unowned self]
时,闭包使Brendon = nil
实例保持活动状态。因此,保留周期,我是否正确?
答案 0 :(得分:4)
在此代码中:
lazy var greeting: String = {
return "Hello, my name is \(self.firstName)"
}()
......没有保留关闭。请注意()
。这只是一个功能,就像任何其他功能一样;它被称为,而不是存储。 greeting
是一个String,而不是存储的闭包。