W mojej aplikacji tworzę nowe kontrolery widoku, zamiast korzystać z segues, ponieważ dzięki temu wygląda lepiej w animacjach, moje widoki działają w tle. Powoduje to duże wycieki pamięci.Usuwanie kontrolera widoku z pamięci podczas tworzenia nowego kontrolera widoku
Mój kod, aby wrócić do głównego ekranu:
let mainStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let vc : UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainScreen") as UIViewController
self.presentViewController(vc, animated: false, completion: nil)
Pogląd ten kontroler jest nadal aktywna w tle, a zatem nie powinny być ponownie instancja. Jak mam to zrobic.
Po zamknięciu kontrolera widoku przy użyciu powyższego kodu również go nie rozładuję, działa on nadal w tle. Jak mogę go zwolnić, gdy zniknie ekran.
Próbowałem robić
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated)
view.removeFromSuperview()
view = nil
}
Jednak to nie działa prawidłowo. W jaki sposób poprawnie zniszczyć kontroler widoku z pamięci podczas wychodzenia z kontrolera widoku w ten sposób.
Ty możliwe, nie usunie kontrolera widoku z jego wnętrza (tj. viewDidDisappear) - musisz usunąć wszystkie odwołania do niego, w którym to momencie 'ARC' zwolni to. Jeśli jedynym miejscem, do którego się odwołujesz, jest to, kiedy utworzysz go powyżej, to po prostu wywołanie polecenia 'dismissViewController' na tym, co je przedstawiło, pozwoli na zwolnienie kontrolera viewcontroller. – Adam