Nella sessione 403 Intermediate Swift e trascrizione della WWDC 2014 , c'era la seguente diapositiva
L'oratore ha detto in quel caso, se non usiamo [unowned self]
lì, sarà una perdita di memoria. Significa che dovremmo sempre usare la [unowned self]
chiusura interna?
Nella riga 64 di ViewController.swift dell'app Swift Weather , non uso [unowned self]
. Ma aggiorno l'interfaccia utente usando alcuni @IBOutlet
s come self.temperature
e self.loadingIndicator
. Potrebbe essere OK perché sono tutti @IBOutlet
definiti weak
. Ma per sicurezza, dovremmo sempre usare [unowned self]
?
class TempNotifier {
var onChange: (Int) -> Void = {_ in }
var currentTemp = 72
init() {
onChange = { [unowned self] temp in
self.currentTemp = temp
}
}
}
onChange
dovrebbe essere una [weak self]
chiusura, poiché è una proprietà pubblica (internamente, ma comunque), quindi un altro oggetto potrebbe ottenere e archiviare la chiusura, mantenendo l'oggetto TempNotifier intorno (indefinitamente se l'oggetto che utilizza non ha lasciato andare la onChange
chiusura fino a quando non vede TempNotifier
scomparire, tramite il suo debole riferimento a TempNotifier
) . Se var onChange …
fosse private var onChange …
allora [unowned self]
sarebbe corretto. Non ne sono sicuro al 100%; qualcuno mi corregga per favore se sbaglio.
[]
? Non riesco a trovare la spiegazione nei documenti di Apple.
{}
è la chiusura vuota (l'istanza della chiusura) come impostazione predefinita (non fa nulla), (Int) -> Void
è la definizione di chiusura.