Deinit UIViewController после добавления его в качестве подпредставления - PullRequest
0 голосов
/ 15 октября 2019

Мне нужно добавить viewcontroller в качестве подпредставления текущего представления mt, но я не могу deinit после того, как он мне больше не нужен

       let viewController = CountrySelectViewController()
        viewController.view.frame = self.view.bounds

        viewController.view.alpha=0

        self.view.addSubview(viewController.view)

        UIView.animate(withDuration: 0.25, delay: 0.0, options: [], animations: {
            viewController.view.alpha=1

        }, completion: { (finished: Bool) in
        })

        viewController.completionHandlerClose = {

            UIView.animate(withDuration: 0.25, delay: 0.0, options: [], animations: {
                viewController.view.alpha=0

            }, completion: { (finished: Bool) in

                viewController.view.removeFromSuperview()
                viewController.view = nil
            })

        }

1 Ответ

1 голос
/ 15 октября 2019

Существует очевидный сильный ссылочный цикл, который необходимо разорвать, используя weak ссылки:

viewController.completionHandlerClose = { [weak viewController] in
    guard let controller = viewController else { return }
    UIView.animate(
        withDuration: 0.25,
        delay: 0.0,
        options: [],
        animations: {
           controller.view.alpha = 0
        },
        completion: { _ in
            controller.view.removeFromSuperview()
            controller.view = nil
        }
    )
}

См. https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...