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 @IBOutlets wie self.temperatureund self.loadingIndicator. Es kann in Ordnung sein, weil alle von @IBOutletmir 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
}
}
}
onChangesollte 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 onChangeVerschluss nicht los, bis es sieht, dass das TempNotifierweg 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) -> Voidist die Abschlussdefinition.
