Почему это предупреждение не позволяет освободить мой контроллер вида?

Я пытаюсь полностью освободить мой контроллер вида из памяти. После нескольких часов тестирования я, наконец, сузил его до UIAlertController остается в памяти, что препятствует освобождению моего контроллера представления.

@objc func logout_click() {
    let alert = UIAlertController(title: "Confirmation", message: "Are you sure you want to log out?", preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "YES", style: .default, handler: { _ in
        // 'YES' button action
        do {
            try Auth.auth().signOut()
            self.popInit()
        } catch {
            print(error)
        }
    }))
    alert.addAction(UIAlertAction(title: "NO", style: .default, handler: { _ in
        // 'NO' button action
        alert.dismiss(animated: true)
    }))
    self.present(alert, animated: true)
}
func popInit() {
    //Go back to init screen
    self.navigationController?.popToRootViewController(animated: true) 
}

Пока это предупреждение не отображается, я могу использовать popInit (), и мой контроллер представления просто освобождается, но после того, как это предупреждение появляется, даже после закрытия, контроллер представления не освобождается. Я не ссылаюсь ни на какие переменные, выходящие за рамки этой функции, так почему же это не позволяет мне освобождать? Что мне нужно сделать, чтобы разрешить освобождение контроллера моего представления?

Всего 1 ответ


Попросите ли обработчик действия YES объявить [weak self] и вызвать self?.popInit() .

Также, как предлагается в комментарии, вы можете заменить обработчик NO на nil .


Есть идеи?

10000