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

时间:2017-08-29 15:08:29

标签: swift initialization closures

我只是在类中使用延迟初始化来尝试属性,这是我的代码:

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实例保持活动状态。因此,保留周期,我是否正确?

1 个答案:

答案 0 :(得分:4)

在此代码中:

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

......没有保留关闭。请注意()。这只是一个功能,就像任何其他功能一样;它被称为,而不是存储。 greeting是一个String,而不是存储的闭包。