EXC_BAD_ACCESS "intentó retener object desasignado" en `deinit`

El siguiente fragment de código falla al deinit con un EXC_BAD_ACCESS y anteriormente con un EXC_BREAKPOINT en el método _swift_abortRetainUnowned con un post " intentado retener object desasignado ".

Me pregunto por qué el self importado se retendrá cuando se captura como unowned , y aunque el cierre se declare explícitamente como @noescape . En mi humilde opinión, yo no debería ser retenido aquí cuando se importó al cierre.

En contraste, cuando el self se capturará como una reference sólida , el código tendrá éxito. Lo entendería si fuera al revés. ¿Qué me falta?

 import Foundation public class Bar { private let _id = 1 func foo(@noescape f: ()->()) -> () { f() } deinit { foo() { [unowned self] in let id = self._id } } } func test() ->() { var cr = Bar() } test() 

Astackr:

 UnownedSelf`_swift_abortRetainUnowned: 0x100174d90 <+0>: leaq 0x1979d(%rip), %rax ; "attempted to retain deallocated object" 0x100174d97 <+7>: movq %rax, 0x65ff2(%rip) ; gCRAnnotations + 8 0x100174d9e <+14>: int3 -> 0x100174d9f <+15>: nop