Diferentes cierres que dan resultados diferentes para retener ciclos en forma rápida

Estoy leyendo la Guía del lenguaje de programación Swift de Apple. En la parte sobre Ciclo de referencia fuerte para cierres, probé un tipo diferente de cierre pero no dio el resultado esperado.

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

La salida de este código es:

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

"p se está desinicializando" se imprime incluso sin [yo propio]

El código en la guía es:

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

Esto imprime el mensaje del desinicializador solo cuando se agrega la declaración [self propio].

¿Cuál es la diferencia entre ambos cierres?

Respuestas a la pregunta(2)

Su respuesta a la pregunta