Sto cercando di risolvere un ciclo di riferimento forte basato sulla chiusura in Swift.
Nel codice sottostante, l'oggetto viene mantenuto dal controller di visualizzazione proprietario. ProgressHUD
è un UIView
che viene mantenuto anche dal controller di visualizzazione proprietario. ProgressHUD
viene interrotto ogni volta che viene chiamato il gestore di completamento. Quando si utilizza la nuova funzionalità di cattura di chiusura, dichiarare se stesso come debole o non proprietario non risolve la perdita di memoria.Chiusure Swift - Catturare sé come debole
object.setCompletionHandler { [weak self] (error) -> Void in
if(!error){
self?.tableView.reloadData()
}
self?.progressHUD?.hide(false)
}
Tuttavia, se dichiaro debole var per l'auto al di fuori della chiusura, si risolve la perdita di memoria, in questo modo:
weak var weakSelf = self
object.setCompletionHandler { (error) -> Void in
if(!error){
weakSelf?.tableView.reloadData()
}
weakSelf?.progressHUD?.hide(false)
}
Tutte le idee perché questo non funziona con la cattura Swift ?
non ci dovrebbe essere un ciclo conservano – newacct