warum nur viewWillAppear die Navigation zurück aufgerufen hat

8

Ich habe Zweifel müssen klar sein .. Ich habe Stapel und eine Navigation controller.now wenn der Stapel lädt die viewDidLoad viewWillAppear viewDidAppear wird aufgerufen. Wenn ich auf einen Button klicke, dann drückt dieser Button mich auf den neuen Stack, jetzt gibt mir der neue Stack die Option auf den Back..nun wenn ich auf die Rückseite des Navigationscontrollers klicke..warscheinlich wird nur viewWillAppear aufgerufen .. Warum nicht viewDidLoad und nicht viewDidAppear

    
user2102546 11.03.2013, 05:23
quelle

4 Antworten

15

Stack ist Last-in-First-Out (LIFO). Wenn Sie also neue View-Controller auf den Stack schieben, wird der vorherige View-Controller nicht zerstört (und bleibt im Speicher). Wenn Sie zurückspringen, müssen Sie den Viewcontroller nicht neu erstellen, da er bereits im Speicher vorhanden ist. Also wird nur viewWillAppear aufgerufen.

Warum viewDidAppear in diesem Fall nicht aufgerufen wird, kann ich mich nicht erinnern, wo ich das gelesen habe, aber viewDidAppear wird aufgerufen, nachdem die Ansicht Ihres UIViewControllers zur UIWindow-Hierarchie der Anwendung hinzugefügt wurde. Und dieser Prozess wird ausgeführt, bevor der UIViewController zum ersten Mal angezeigt wird.

viewDidLoad wird nur aufgerufen, wenn viewControllers-Ansichten in den Speicher geladen werden. Es wird gemacht, wenn

  1. das erste Mal, dass die Ansicht angezeigt werden soll
  2. manchmal, wenn ViewController erneut geladen werden musste, weil Es wird für wenig Speicher aus dem Speicher gelöscht.

In Ihrem Fall ist der viewController beim Zurücksetzen bereits geladen, so dass Sie viewDidLoad nicht erneut aufrufen müssen.

    
Krishnabhadra 11.03.2013, 05:33
quelle
12

Der vollständige Lebenszyklus von ios ui wird hier erklärt.

Ссылка

Hinweis Abizern aus dem Kommentar: Dies gilt für iOS5 und früher. iOS6 lädt keine Aufrufe mehr.

    
Hasintha Janka 11.03.2013 05:29
quelle
3

Zunächst einmal nette Frage @ user2102546. Überprüfen Sie hier den perfekten Grund für Ihre Anfrage.

viewDidLoad wird nur aufgerufen, wenn View-Controller-Ansichten entladen wurden und neu geladen werden müssen.

Wenn Sie normalerweise einen Navigationscontroller verwenden und mit einer der Popup-Methoden zu einer vorherigen Ansicht zurückkehren, viewDidLoad does not get called again, because the view are not unloaded yet .

Allerdings kann das System die Ansichten eines beliebigen View-Controllers entladen, wenn dieser nicht im Vordergrund steht, um Speicher freizugeben, sodass viewDidLoad jederzeit aufgerufen werden kann, wenn ein View-Controller vorgestellt wird. Sie müssen Ihren Code schreiben, um korrekt auf die verschiedenen Ereignisse zu reagieren.

Viel Spaß beim Programmieren!

    
Niru Mukund Shah 11.03.2013 05:38
quelle
2

Ich habe keine vollständige Antwort für Sie, aber ich hoffe, das hilft.

viewDidLoad ist ein Callback zum Ändern einer Ansicht nach dem Laden des Ereignisses. In Ihrem Fall wurde die Ansicht bereits geladen. Die Tatsache, dass es nicht in Sicht ist, bedeutet nicht, dass es aus dem Speicher gelöscht wurde.

viewDidAppear: Ich weiß zwar nicht, warum dieses Ereignis nicht ausgelöst wird und würde mich freuen, wenn jemand anderes die Lücke füllen würde.

    
Nathan 11.03.2013 05:28
quelle