Swift Closures - Capturando a si mesmo como fraco
Estou tentando resolver um forte ciclo de referência baseado em fechamento no Swift.
No código abaixo, o objeto é retido pelo controlador de exibição proprietário.ProgressHUD
é umUIView
isso também é retido pelo controlador de exibição proprietário.ProgressHUD
vaza toda vez que o manipulador de conclusão é chamado. Ao usar o novo recurso de captura de fechamento, declarar-se como fraco ou não proprietário não resolve o vazamento de memória.
object.setCompletionHandler { [weak self] (error) -> Void in
if(!error){
self?.tableView.reloadData()
}
self?.progressHUD?.hide(false)
}
No entanto, se eu declarar um var fraco para si mesmo fora do fechamento, ele corrigirá o vazamento de memória, assim:
weak var weakSelf = self
object.setCompletionHandler { (error) -> Void in
if(!error){
weakSelf?.tableView.reloadData()
}
weakSelf?.progressHUD?.hide(false)
}
Alguma idéia de por que isso não está funcionando com a captura Swift?