ios - example - uialertcontroller swift 4
¿Debería auto capturarse como fuerte en el controlador de UIAlertAction? (1)
La pregunta clave que debe hacerse es si su objeto de alerta es "propiedad" de uno mismo. En este caso, no lo es (porque has declarado let alert = ...
en el cuerpo de la función). Por lo tanto, no es necesario que cree esto como una referencia débil o sin dueño.
Si la alerta era una propiedad de uno mismo, entonces sería "propiedad" de uno mismo y es entonces cuando querría crear una referencia débil a sí mismo en el cierre "propiedad" de la alerta.
Al escribir el cierre del handler
de una UIAlertAction
, ¿debería la referencia a self
ser fuerte (el valor predeterminado), weak
o unowned
?
Ha habido publicaciones relevantes para este tema ( 1 , 2 , 3 , 4 ) pero sinceramente no veo cómo ayudan en este caso.
Vamos a centrarnos en este código típico:
func tappedQuitButton() {
let alert = UIAlertController(title: "Confirm quit", message: nil, preferredStyle: .ActionSheet)
let quitAction = UIAlertAction(title: "Quit", style: .Default) { (action) in
self.dismissViewControllerAnimated(true, completion: nil)
}
alert.addAction(quitAction)
let cancelAction = UIAlertAction(title: "Cancel", style: .Default) { (action) in
self.dismissViewControllerAnimated(true, completion: nil)
}
alert.addAction(cancelAction)
presentViewController(alert, animated: true, completion: nil)
}
Esta es una función dentro de una subclase UIViewController
, por lo que el controlador de vista que presenta la alerta es uno mismo.
La documentation dice:
Use una referencia débil para evitar ciclos de referencia siempre que sea posible que esa referencia tenga "ningún valor" en algún momento de su vida. Si la referencia siempre tendrá un valor, utilice una referencia sin dueño en su lugar.
Puedo ser ciego, pero todavía no veo cómo esto ayuda a responder mi pregunta sobre UIAlertAction
.
En el código anterior, ¿es posible que el self
sea nulo en algún momento de su vida ? Sí. Entonces debería marcarme como weak
.
Pero, de nuevo, no puedo pensar en un escenario plausible en el que el self
sea nulo cuando se llame al cierre. Entonces, en lo que se refiere a ese cierre, el self
siempre tendrá un valor . Entonces debería unowned
mí self
como unowned
.
Entonces, de nuevo, ¿cómo debería ser capturado uno mismo en el controlador de UIAlertAction?