Изменение rootViewController вызывает странное поведение

Я устанавливаю rootViewController, как это в моем приложении.

func setupMainView() {
    let rootViewContorller = window?.rootViewController

    if (rootViewContorller?.presentedViewController != nil || rootViewContorller?.presentingViewController != nil) {
        rootViewContorller?.dismiss(animated: false, completion: nil)
    }

    let tabbarController = UITabBarController()
    tabbarController.delegate = self

    let homeViewController = HomeViewController()
    let rewardsViewController = RewardsViewController()

    let homeNVc = UINavigationController()
    let rewardsNVc = UINavigationController()

    homeNVc.viewControllers = [homeViewController]
    rewardsNVc.viewControllers = [rewardsViewController]

    tabbarController.viewControllers = []

    tabbarController.viewControllers = [homeNVc, rewardsNVc]
    tabbarController.selectedIndex = 0

    self.window?.rootViewController = tabbarController
}

Работает нормально. Но я должен изменить rootViewController в приложении, как после регистрации и т. Д. После этого, когда я иду в Debug View Hierarchy, Я все еще вижу регистрацию ViewController там. И скажем, если я меняю rootViewController 3-4 раза, все предыдущие контроллеры все еще там. Поэтому мой вопрос: как я могу удалить все viewController из памяти перед изменением rootViewController.

1 ответ

Вы можете вызвать эту функцию, это очистит все контроллеры представления.

self.window?.rootViewController?.dismissViewControllerAnimated(false, completion: nil)
Другие вопросы по тегам