Почему это свойство viewController не предотвращает освобождение объекта?

Пожалуйста, рассмотрите следующий код:

class Module {
    let viewController = ExampleViewControler()

    deinit {
        print("deinit")
    }
}

class ExampleViewControler: UIViewController {}



@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        window = UIWindow(frame: UIScreen.main.bounds)

        let mod = Module()
        let navController = UINavigationController(rootViewController: mod.viewController)
        window?.rootViewController = navController

        window?.makeKeyAndVisible()

        return true
    }

ViewController сохраняется navController. Почему deinit вызывается в экземпляре модуля? Разве это не должно быть сохранено, так как его собственность сохранена?

В любом случае, я хотел бы сохранить объект в активном состоянии, так как контроллер представления активен. Как я могу этого достичь?

Спасибо!

1 ответ

Решение

mod переменная не сохраняется никем. Это внутренняя переменная функции. Как только функция выходит из mod освобождается. Никто не сохраняет это.

Другие вопросы по тегам