En la sesión de WWDC 2014 403 Intermedio Swift y transcripción , hubo la siguiente diapositiva
El orador dijo en ese caso, si no lo usamos [unowned self]
allí, será una pérdida de memoria. ¿Significa que siempre debemos usar el [unowned self]
cierre interior?
En la línea 64 de ViewController.swift de la aplicación Swift Weather , no lo uso [unowned self]
. Pero actualizo la interfaz de usuario usando algunos @IBOutlet
s como self.temperature
y self.loadingIndicator
. Puede estar bien porque todos los @IBOutlet
s que definí son weak
. Pero por seguridad, ¿deberíamos usar siempre [unowned self]
?
class TempNotifier {
var onChange: (Int) -> Void = {_ in }
var currentTemp = 72
init() {
onChange = { [unowned self] temp in
self.currentTemp = temp
}
}
}
onChange
debe ser un [weak self]
cierre, ya que es una propiedad pública (internamente, pero aún así), por lo que otro objeto podría obtener y almacenar el cierre, manteniendo el objeto TempNotifier alrededor (indefinidamente si el objeto en uso no soltó el onChange
cierre hasta que vio que TempNotifier
se había ido, a través de su propia referencia débil a TempNotifier
) . Si var onChange …
fuera private var onChange …
así [unowned self]
, sería correcto. Sin embargo, no estoy 100% seguro de esto; alguien me corrija por favor si me equivoco.
[]
? No puedo encontrar la explicación en los documentos de Apple.
{}
es el cierre vacío (la instancia del cierre) como predeterminado (no hace nada), (Int) -> Void
es la definición de cierre.