Noté que el estado de las variables no se conserva entre las diferentes presentaciones de un controlador de vista.

    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()
    }

Entonces, cada vez que descarto este ViewController y lo presento nuevamente, mi starrySky.state siempre es falso. Tengo el mismo código en los mismos métodos en mi rootViewController y cada vez que cambio de vista el estado se conserva.

  • Entonces, ¿esto significa que cualquier VC presentado modalmente se descarta de memoria después de llamar dismiss(animated:,completion:)?
0
lychee 6 may. 2020 a las 04:00

2 respuestas

La mejor respuesta

Entonces, ¿esto significa que cualquier VC presentado modalmente se descarta de la memoria después de llamar a descartar

Normalmente si. Los controladores de vista forman una jerarquía o cadena de padre / presentador y niño / presentado. El primero posee y retiene el segundo, y lo libera cuando se elimina el último. El controlador raíz nunca se elimina a menos que lo reemplace deliberadamente.

2
matt 6 may. 2020 a las 01:51

Porque cuando presenta la vista nuevamente, la variable starrySky se inicializa nuevamente con falso, puede guardar el estado usando userDefaults en viewWillDisappear y leerlo en viewWillAppear

0
Asmaa Tarek 6 may. 2020 a las 01:39