Na sessão 403 da WWDC 2014, Swift intermediário e transcrição , houve o seguinte slide
O orador disse que, nesse caso, se não usarmos [unowned self]
lá, será um vazamento de memória. Isso significa que devemos sempre usar o [unowned self]
fechamento interno?
Na linha 64 do ViewController.swift do aplicativo Swift Weather , eu não uso [unowned self]
. Mas eu atualizo a interface do usuário usando alguns @IBOutlet
s como self.temperature
e self.loadingIndicator
. Pode ser bom, porque todos os que @IBOutlet
eu defini são weak
. Mas por segurança, devemos sempre usar [unowned self]
?
class TempNotifier {
var onChange: (Int) -> Void = {_ in }
var currentTemp = 72
init() {
onChange = { [unowned self] temp in
self.currentTemp = temp
}
}
}
onChange
deve ser um [weak self]
fechamento, já que é uma propriedade pública (internamente, mas ainda), para que outro objeto possa obter e armazenar o fechamento, mantendo o objeto TempNotifier por perto (indefinidamente se o objeto using não soltou o onChange
fechamento até ver o TempNotifier
desaparecimento, através de sua própria referência fraca para o TempNotifier
) . Se var onChange …
fosse private var onChange …
então [unowned self]
estaria correto. Não tenho 100% de certeza disso; alguém me corrija por favor se eu estiver errado.
[]
? Não consigo encontrar a explicação nos documentos da Apple.
{}
é o fechamento vazio (a instância do fechamento) como o padrão (não faz nada), (Int) -> Void
é a definição de fechamento.