На сессии WWDC 2014 403 Intermediate Swift и стенограмма был следующий слайд
В этом случае оратор сказал, что если мы не будем [unowned self]
там пользоваться, это приведет к утечке памяти. Означает ли это, что мы всегда должны использовать [unowned self]
внутри закрытия?
В строке 64 файла ViewController.swift приложения Swift Weather я не пользуюсь [unowned self]
. Но я обновляю пользовательский интерфейс, используя некоторые @IBOutlet
s 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
является определением замыкания.