Frage

Die Wurzel Frage lautet: „Wie viele UIViewControllers können Sie auf dem Navigationsstapel schieben?“ ohne Speicher Warnungen zu verursachen oder eine Watchdog-Beendigung zu verdienen.

Angenommen, ich eine Anwendung, die im Grunde eine Datenbank für drei Einheiten ist, wo jeweils eine Beziehung mit einer anderen Person haben kann, und die Beziehung auf einem UIViewController gezeigt. Benutzer können diese Beziehungen folgen und jeder bringt einen neuen Controller up - Wenn die Einheiten A, B und C sind und A-> B-> C-> B> C> A dann jede Art von Blick ist auf dem Stapel zweimal . Ich verstehe, wie drücken und Pop, wie man eine bestimmte Steuerung zurück zu drängen, und ich denke, anstatt nur den Navigationsstapel unbegrenzt verlängern könnte es am besten sein, einen View-Controller in dem Navigationsstapel wieder zu verwenden.

Um dies zu tun, jedes Mal wenn ich eine FirstEntityViewController wollte kann ich die Navigationsstapel scannen ein Objekt, wo [self isKindOfClass:[FirstEntityViewController class]]; und rufen Sie dann Methoden zu finden, gestalteten diese Ansicht verfeinern für das, was zur Zeit ich sehen will - erfrischend einfach die Daten auf die gleiche Art und Weise Sie tun, wenn eine UITableViewCell wiederverwendet.

Das ist in Ordnung, außer für die Wirkung, die sie auf der Navigation haben könnten. Wenn ich UINavigationController:popToViewController:animated: verwende Ich denke, es alles über der Ansicht zu verwerfen, wird ich bin knallend, einschließlich der Ansicht, die der Benutzer auf Klopfen „Zurück“ in der Navigationsleiste zu finden erwartet. So Benutzer eine Beziehung klopft, klopft zurück und geht „nicht wahr?“

Wenn ich die passenden Controller aus dem Navigationsstapel entfernen und es dann an die Spitze Pop auf dem Stapel die Rückseite Verhalten OK bleibt, solange der Benutzer nicht so weit wie die Instanz von FirstEntityViewController geht zurück, die verschoben wurde oder sonst wieder wird die Navigation inkonsistent zu sein scheint.

ist die richtige Lösung, um die Steuerung von dem Stapel zu entfernen, und irgendwie einen Platz in dem Stapel zu halten, so dass, wenn die wieder verwendete Controller knallt es wieder ersetzt werden kann, wo es herkommt? Soll ich meine eigene Liste der Ansicht Art und Datenanzeige halten, so dass, wenn knalle ich die Ansicht unterhalb der Ansicht ersetzen kann, um Pop, einen Schritt voraus zurück Navigation bleiben?

oder ist das nur immer zu kompliziert? Gibt es keine Notwendigkeit, auch über diese Situation Sorgen machen, weil das Betriebssystem einen Großteil der Ansicht-Controller in der gleichen Weise wieder verwendet als UITableViewCells wiederverwendet werden, und es gibt keine wirkliche Erinnerung oder Auswirkungen auf die Leistung in einen 50-deep Navigationsstapel mit?

War es hilfreich?

Lösung

Viewcontroller-Instanzen bleiben in dem UINavigationController Stack, aber jede Ansicht mit Ausnahme der Draufsicht kann jederzeit (der View-Controller gemeldet wird über die viewDidUnload Nachricht) entladen werden.

Mit anderen Worten, die Ansichten unter der Draufsicht nicht hängen herum und werden schließlich in low-memory Bedingungen entladen werden, so gibt es keine Notwendigkeit für Sie, um zu versuchen, Ihre Ansicht-Controller wieder zu verwenden.

Andere Tipps

Zuletzt Ich habe Sie nicht ein Viewcontroller drücken, das sich bereits auf einem NavController Stapel wieder auf ihn zurück. Sie werden eine neue Viewcontroller erstellen müssen und schieben Sie es auf den Stapel und jeder Zurück-Taste wird, dass man von dem Stapel Pop. Das Beste, was Sie tun können, ist ein Cache von Viewcontrollers machen und Almosen verteilen sie aus nach Bedarf - solange sie den NavController Stapel genommene sind. Aber es wird wahrscheinlich nicht Sie kaufen viel im Wege der Speichereinsparungen.

UITableViews sind ein bisschen anders, dass es nur eine relativ kleine Anzahl von Zellen in Sicht zu einem bestimmten Zeitpunkt und sobald die Zelle geht Offscreen es Löschungen und zurück in den Pool zurückgegeben. Wenn Sie, dass die maxdepth Ihrer Kette garantieren können festgelegt ist, dann können Sie ein ähnliches Windowing-Schema ziehen. Wenn nicht, können Sie mit dem Gehen tief zu halten haben und über die Freigabe-Speicher so schnell wie möglich wachsam sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top