Dans la session 403 de la WWDC 2014 Intermediate Swift et transcription , il y avait la diapositive suivante
L'orateur a dit que dans ce cas, si nous ne l'utilisons pas [unowned self]
, ce sera une fuite de mémoire. Cela signifie-t-il que nous devrions toujours utiliser la [unowned self]
fermeture intérieure?
Sur la ligne 64 de ViewController.swift de l'application Swift Weather , je n'utilise pas [unowned self]
. Mais je mets à jour l'interface utilisateur en utilisant certains @IBOutlet
s comme self.temperature
et self.loadingIndicator
. Cela peut être OK car tous les @IBOutlet
s que j'ai définis le sont weak
. Mais pour la sécurité, devrions-nous toujours utiliser [unowned self]
?
class TempNotifier {
var onChange: (Int) -> Void = {_ in }
var currentTemp = 72
init() {
onChange = { [unowned self] temp in
self.currentTemp = temp
}
}
}
onChange
devrait être une [weak self]
fermeture, car c'est une propriété publique (en interne, mais quand même), donc un autre objet pourrait obtenir et stocker la fermeture, en gardant l'objet TempNotifier autour (indéfiniment si l'objet utilisateur n'a pas lâché la onChange
fermeture jusqu'à ce qu'il voit le TempNotifier
disparu, via sa propre référence faible à la TempNotifier
) . Si var onChange …
c'était le cas , private var onChange …
ce [unowned self]
serait correct. Je n'en suis cependant pas sûr à 100%; quelqu'un me corrige s'il vous plaît si je me trompe.
[]
? Je ne trouve pas l'explication dans les documents Apple.
{}
est la fermeture vide (l'instance de la fermeture) par défaut (ne fait rien), (Int) -> Void
est la définition de la fermeture.