Выгружается ли ViewController из памяти после увольнения? - PullRequest
0 голосов
/ 06 мая 2020

Я заметил, что состояние переменных не сохраняется среди различных представлений контроллера представления.

    var starrySky = StarrySky() // this has a state property which is false initially
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        if starrySky.state == false { starrySky.createSky(for: self.view) }
        if starrySky.state != false { starrySky.resumeSkyAnimations()} // this never runs

    }
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        starrySky.state = true // here im changing the state
        starrySky.removeSkyAnimations()
    }

Поэтому всякий раз, когда я отклоняю этот ViewController и представляю его снова, мой starrySky.state всегда ложен. У меня такой же код в тех же методах в моем rootViewController, и всякий раз, когда я меняю представления, состояние сохраняется.

  • Значит ли это, что любые V C, представленные модально, удаляются из памяти после вызова dismiss(animated:,completion:)?

Ответы [ 2 ]

5 голосов
/ 06 мая 2020

Значит ли это, что любые V C, представленные модально, удаляются из памяти после того, как вы вызываете dismiss

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

1 голос
/ 06 мая 2020

Поскольку, когда вы снова представляете представление, переменная starrySky снова инициализируется значением false, вы можете сохранить состояние, используя userDefaults в viewWillDisappear и прочитать его в viewWillAppear

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