Параметры захвата захвата сильно по умолчанию. В большинстве распространенных случаев закрытия вы получаете доступ к свойствам, объявленным в self
, без учета других ссылок, поэтому достаточно сделать self
слабым. В вашем случае необходимо расширить список захвата закрытия и включает tableView
к нему:
func someFunction(tableView: UITableView) -> (() ->()) {
return { [weak self, weak tableView] in
self?.someOtherFunction() {
tableView?.performTask()
}
}
}
Вы можете прочитать больше о списках захвата в ARC документации:
Вы решаете сильный опорный цикл между замыканием и класс , определяя список захвата как часть определениязакрытия. Список захвата определяет правила, используемые при записи одного или нескольких ссылочных типов в корпусе закрывания. Как и в случае с сильными ссылочными циклами между двумя экземплярами класса, вы объявляете, что фиксированная ссылка является слабым или недействительным, а не ссылкой .