Различные замыкания, дающие разные результаты для сохранения циклов в Swift

Я читаю Руководство по языку программирования Swift от Apple. В части о Strong Reference Cycle для замыканий я пробовал другой тип замыкания, но он не дал ожидаемого результата.

class HTMLElement {

let name: String
let text: String?

lazy var asHTML : String = {

    //[unowned self] in

    if let text = self.text {
        return "<\(self.name)>\(text)</\(self.name)>"
    } else {
        return "<\(self.name) />"
    }
}()

init(name: String, text: String? = nil) {
    self.name = name
    self.text = text
}

deinit {
    println("\(name) is being deinitialized")
}

}

 var paragraph: HTMLElement? = HTMLElement(name: "p", text: "hello, world")
 println(paragraph!.asHTML)
 paragraph = nil

Выход этого кода:

<p>hello, world</p>
p is being deinitialized

«р деинициализируется» печатается даже без [неопознанного я]

Код в руководстве:

class HTMLElement {

let name: String
let text: String?

lazy var asHTML: () -> String = {
    [unowned self] in
    if let text = self.text {
        return "<\(self.name)>\(text)</\(self.name)>"
    } else {
        return "<\(self.name) />"
    }
}

init(name: String, text: String? = nil) {
    self.name = name
    self.text = text
}

deinit {
    println("\(name) is being deinitialized")
}

}
var paragraph: HTMLElement? = HTMLElement(name: "p", text: "hello, world")
 println(paragraph!.asHTML)
 paragraph = nil

Это печатает сообщение deinitialiser только тогда, когда добавлен оператор [unowned self].

В чем разница между обоими замыканиями?

Ответы на вопрос(2)

Ваш ответ на вопрос