我正在用Swift試驗內存管理。做懶惰變量時,我們需要弱或無主的參考嗎?內存管理
class Person {
let name: String
//var block: (() -> Void)?
init(name: String) {
self.name = name
}
// Declare variable clone, using self inside.
private lazy var clone: String = {
return self.name
}()
deinit {
print("Destroying \(name)")
}
func doSomething() {
print("Doing something for \(name)")
}
}
var p2: Person? = Person(name: "p2")
print(p2!.clone)
p2 = nil
正如你看到的,我聲明懶惰的VAR在使用self
內,我認爲這仍然是確定,因爲當P2越來越零,我可以看到deinit
方法被調用。
但是,如果我做喜歡以下
// This is a closure
private lazy var clone:() -> String = {
return self.name // leaking memory is here
}
現在的變化,我得到一個內存泄漏。
我的問題是使用懶惰實例化的變量,爲什麼我沒有泄漏內存,即使我正在使用self
。我以爲我必須使用它,否則我會得到一個泄漏的內存。
這是我在發佈之前所想的。我想確保我的想法是正確的。謝謝 – tonytran