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