In der WWDC 2014-Sitzung 403 Intermediate Swift und im Transkript gab es die folgende Folie
Der Sprecher sagte in diesem Fall, wenn wir es dort nicht verwenden [unowned self]
, wird es ein Speicherverlust sein. Bedeutet das, dass wir immer einen [unowned self]
Innenverschluss verwenden sollten?
In Zeile 64 von ViewController.swift der Swift Weather-App verwende ich nicht [unowned self]
. Aber ich aktualisiere die Benutzeroberfläche mit einigen @IBOutlet
s wie self.temperature
und self.loadingIndicator
. Es kann in Ordnung sein, weil alle von @IBOutlet
mir definierten s sind weak
. Aber sollten wir aus Sicherheitsgründen immer verwenden [unowned self]
?
class TempNotifier {
var onChange: (Int) -> Void = {_ in }
var currentTemp = 72
init() {
onChange = { [unowned self] temp in
self.currentTemp = temp
}
}
}
onChange
sollte ein [weak self]
Abschluss sein, da es sich um eine öffentliche (interne, aber immer noch) Eigenschaft handelt, sodass ein anderes Objekt den Abschluss abrufen und speichern kann, wobei das TempNotifier-Objekt erhalten bleibt (unbegrenzt, wenn Das benutzende Objekt ließ den onChange
Verschluss nicht los, bis es sieht, dass das TempNotifier
weg ist, über seinen eigenen schwachen Verweis auf das TempNotifier
) . Wenn var onChange …
waren private var onChange …
dann [unowned self]
wäre richtig. Ich bin mir dessen jedoch nicht 100% sicher. jemand korrigiert mich bitte, wenn ich falsch liege.
[]
? Ich kann die Erklärung nicht in den Apple-Dokumenten finden.
{}
ist der leere Abschluss (die Instanz des Abschlusses) als Standard (macht nichts), (Int) -> Void
ist die Abschlussdefinition.