Bei -(void)viewDidDisappear alles entfernen sinnvoll?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Bei -(void)viewDidDisappear alles entfernen sinnvoll?

    Hallo liebe Community,
    da gibt es eine Sache die mich schon länger beschäftigt!

    Wenn ein ViewController aus der Sicht des Nutzers verschwindet ->
    Der Nutzer einen anderen ViewController betritt wird ja -(void)viewDidDisappear:(BOOL)animated{}
    aufgerufen.

    Ist es sinnvoll dort bei allen UIObjekten [OBJEKT removefromSuperview] auszuführen und/oder
    sie nil zu setzen?

    Oder ist das absolut unnötig?
  • Das ist sogar recht problematisch.
    Wenn du z.B. einen NavigationController hast, wird beim Pushen ja viewWill/DidAppear aufgerufen.
    Wird der nächste gepushed, wird viewWill/DidAppear des neuen ViewControllers aufgerufen und viewWill/DidDisappear des ersten.

    Geht man nun über den BackButton zurück, wird dein erster ViewController ja wieder angezeigt.
    Dessen View wird aber nicht erneut geladen (viewDidLoad). Sprich dein erster Controller erscheint ohne all die Subviews die du entfernt hast.
    Du müsstest die in viewWillAppear (das nun erneut beim ersten ViewController aufgerufen wird) wieder händisch alles hinzufügen. ;)
  • joluc schrieb:

    Ist es sinnvoll dort bei allen UIObjekten [OBJEKT removefromSuperview] auszuführen und/oder
    sie nil zu setzen?
    Das ist unnötig und umständlich. Wenn du den Speicherplatz unbedingt freigeben willst, kannst du einfach den View über self.view = nil; setzen. Dann lädt der Viewcontroller seinen View beim nächsten Durchlauf des Anzeigezyklus automatisch neu. Den View solltest du allerdings nur freigeben, wenn das unbedingt notwendig ist (z. B. in didReceiveMemoryWarning) und definitiv nicht angezeigt wird (self.view.window == nil).

    Die Gefahr von POITROAE ist hier übrigens sehr hoch. ;)
    „Meine Komplikation hatte eine Komplikation.“