Podczas sesji WWDC 2014 403 Intermediate Swift i transkrypcji pojawił się następujący slajd

Mówca powiedział w takim przypadku, że jeśli go nie użyjemy [unowned self], nastąpi wyciek pamięci. Czy to oznacza, że zawsze powinniśmy używać [unowned self]zamknięcia wewnętrznego?
W linii 64 ViewController.swift aplikacji Swift Weather nie używam [unowned self]. Ale aktualizuję interfejs za pomocą niektórych @IBOutlettakich jak self.temperaturei self.loadingIndicator. Może być OK, ponieważ wszystkie @IBOutlets, które zdefiniowałem, są weak. Ale czy ze względów bezpieczeństwa powinniśmy zawsze używać [unowned self]?
class TempNotifier {
var onChange: (Int) -> Void = {_ in }
var currentTemp = 72
init() {
onChange = { [unowned self] temp in
self.currentTemp = temp
}
}
}
onChangepowinien być [weak self]zamknięciem, ponieważ jest to właściwość publiczna (wewnętrznie, ale nadal), aby inny obiekt mógł uzyskać i przechowywać zamknięcie, utrzymując obiekt TempNotifier w pobliżu (bezterminowo, jeśli obiekt używający nie puścił onChangezamknięcia, dopóki nie zobaczy, że TempNotifierzniknął, poprzez swoje własne słabe odniesienie do TempNotifier) . Gdyby var onChange …były, private var onChange …to [unowned self]byłoby poprawne. Nie jestem jednak tego w 100% pewien; proszę mnie poprawić, jeśli się mylę.
[]? Nie mogę znaleźć wyjaśnienia w dokumentach Apple.
{}to puste zamknięcie (instancja zamknięcia) jako domyślne (nic nie robi), (Int) -> Voidto definicja zamknięcia.
