Swift Closures - захватывать себя как слабого
Я пытаюсь разрешить цикл сильных ссылок на основе замыкания в Swift.
В приведенном ниже коде объект сохраняется владельцем контроллера представления.ProgressHUD
этоUIView
это также сохраняется контроллером представления.ProgressHUD
просачивается каждый раз, когда вызывается обработчик завершения. При использовании новой функции захвата замыкания объявление себя как слабого или несостоявшегося не устраняет утечку памяти.
object.setCompletionHandler { [weak self] (error) -> Void in
if(!error){
self?.tableView.reloadData()
}
self?.progressHUD?.hide(false)
}
Однако, если я объявляю слабую переменную для себя за пределами замыкания, это исправляет утечку памяти, например:
weak var weakSelf = self
object.setCompletionHandler { (error) -> Void in
if(!error){
weakSelf?.tableView.reloadData()
}
weakSelf?.progressHUD?.hide(false)
}
Любые идеи относительно того, почему это не работает с захватом Swift?