На сессии WWDC 2014 403 Intermediate Swift и стенограмма был следующий слайд

В этом случае оратор сказал, что если мы не будем [unowned self]там пользоваться, это приведет к утечке памяти. Означает ли это, что мы всегда должны использовать [unowned self]внутри закрытия?
В строке 64 файла ViewController.swift приложения Swift Weather я не пользуюсь [unowned self]. Но я обновляю пользовательский интерфейс, используя некоторые @IBOutlets self.temperatureи self.loadingIndicator. Это может быть хорошо, потому что все, что @IBOutletя определил weak. Но для безопасности, мы всегда должны использовать [unowned self]?
class TempNotifier {
var onChange: (Int) -> Void = {_ in }
var currentTemp = 72
init() {
onChange = { [unowned self] temp in
self.currentTemp = temp
}
}
}
onChangeдолжен быть [weak self]закрытием, так как это открытое (внутренне, но все же) свойство, поэтому другой объект может получить и сохранить закрытие, сохраняя объект TempNotifier вокруг (неопределенно, если использующий объект не отпустил onChangeзамыкание, пока не увидит, что TempNotifierоно ушло, через свою собственную слабую ссылку на TempNotifier) . Если бы var onChange …было private var onChange …то [unowned self]было бы правильно. Я не уверен на 100% в этом; кто-нибудь поправьте меня, пожалуйста, если я ошибаюсь.
[]? Я не могу найти объяснение в документации Apple.
{}является пустым замыканием (экземпляром замыкания) по умолчанию (ничего не делает), (Int) -> Voidявляется определением замыкания.
