Почему это предупреждение не позволяет освободить мой контроллер вида? - PullRequest
1 голос
/ 28 марта 2020

Я пытаюсь полностью освободить мой контроллер вида из памяти. После нескольких часов тестирования я, наконец, сократил его до 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 Ответ

0 голосов
/ 28 марта 2020

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

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

...