Leitet über und clearing historischen ViewControllers aus dem Speicher
Habe ich eine iPad-app, die eine Menge von Bildschirmen und einer Menge von segue Optionen.
Im moment bin ich einfach mit performSegueWithIdentifier zu initiieren, diese leitet über, und meine Angst ist, dass ich dabei viel Speicher wie der Benutzer führt mehr und mehr leitet über.
Ich habe gesehen, dass Leute empfehlen, verwenden Sie die Funktion popToRootViewControllerAnimated: wenn Sie mit einem UINavigationController, aber das problem ist, dass ich nicht mit ein.
Wie kann ich verhindern, dass die Anzahl der VC ' s vermehren?
Die Art und Weise, die app funktioniert, der Nutzer muss ständig zurück zu der Wurzel VC - effektiv eine Suchmaske. Also, wenn ich konnte klar, die Stapel von VC ist, wenn ein solcher übergang erforderlich ist, dass lösen würde mein Problem denke ich, aber ich habe keine Ahnung, wie gehen über diese.
Vielen Dank für alle Vorschläge.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie leitet über den Fluss bewegt sich rückwärts und vorwärts. Wenn der Benutzer sich gerade nach hinten bewegt (dh drückt "zurück") dann wird es nicht schieben Sie eine neue VC-aber es wird pop zu einer VC, die bereits existierte. Wenn Sie Sie pop, die aktuellen VC wird vom stack entfernt und Speicher.
Wenn Sie haben, leitet über, sich rückwärts zu bewegen in der Strömung, dann ist dies falsch. Sie müssen nur leitet über, um vorwärts zu bewegen.
EINE ORDNUNGSGEMÄßE VORBEREITUNG FÜR SEGUE
In Vorbereitung für den übergang sollte man niemals erstellen Sie Ihre eigenen view-Controller und drücken Sie auf Sie. Das storyboard ist es all dies zu tun für Sie.
Einen richtigen prepareForSegue-Methode sollte in etwa so Aussehen...
Dass ist alles, was Sie brauchen. Beachten Sie, dass Sie müssen nur diese, wenn Sie wollen, um einige Informationen zu dem neuen view-controller. Wenn Sie nicht übergeben, nichts nach vorne, dann brauchen Sie nicht diese Methode in allen.
Wenn die Methode endet, die neue VC bekommen, drückte auf den Bildschirm, von der storyboard-Datei.
ENTSPANNEN LEITET ÜBER
Wenn Sie eine zufällige Strömung (wie in deinem Kommentar), dann können Sie entspannen leitet über zu erreichen.
In Ihnen 'Ein' view-controller eine Funktion haben wie...
Es zu erhalten braucht ein UIStoryboardSegue Objekt. Wenn ein IBAction Sie können auch ein Zugriff vom Interface Builder.
Nun, wenn Sie wollen, um zu gehen Ein > B > C > B > Eine nur dann verwendet die standard-push und pop (von der segue-und zurück-Taste).
Wann Sie wollen A > B > C > Ein, dann können Sie das unwind segue vom controller C.
Wenn Sie die Schaltfläche "Abbrechen" oder etwas in der regler C und das ist im Interface Builder, und das sollte Sie wieder zum controller A. Dann in den Interface Builder unter controller C haben Sie ein kleines grünes Quadrat mit einer Tür und einem Pfeil aus ihm heraus. Zeigen Sie einfach die Aktion der Abbrechen-Taste auf dieses symbol und wählen Sie "someUnwindAction". (Beachten Sie, unwindAction ist in Einem, Knopf ist in C.) XCode verwendet dann diese pop Sie alle der Weg zurück zu Ein und befasst sich mit dem entfernen von Speicher und so. Wenn Sie möchten, können Sie zusätzliche Informationen senden, wieder zu Einem zu.
Wenn Sie möchten, um Zugriff auf diese unwind segue von C, programmgesteuert, dann können Sie run...
Diese wird auch pop zurück zu A.
imho sehe ich keine Probleme bei der Verwendung leitet über, es ist viel einfacher als alles andere. Wenn Sie sich sorgen über Speicherplatz verbraucht dann nur das Profil der app und sehen, wie viel es isst und wie oft Ihre "memory-Druck-handler" aufgerufen wird.
ok, ich glaube, ich habe es erkannt. Es scheint zu funktionieren.
Da ich immer wieder an ein gemeinsames VC, I am Legend-code in den Orten, wo ich will segue zurück zu dieser 'root' VC, klar, die VC-stack.
Ich noch ausführen die tatsächliche überleitung in meiner normalen code
Jedoch in der " prepareForSegue:' Methode, die ich nicht mehr erstellen Sie eine neue VC-Objekt, anstatt ich irgendwelche arbeiten habe ich hervorragend (meine Daten speichern) aus, und deaktivieren Sie die VC-stack mit den folgenden code.
Scheint es einwandfrei und hat die gewünschte Wirkung (bestätigt über dem profiler) der Freigabe der Erinnerung, dass diese VC aufgesaugt.
Eine Letzte Bemerkung - aus irgendeinem Grund konnte ich Sie nicht animieren, die Entlassung Befehl, diese erschien zum auslösen einer Endlosschleife geführt und mit einem EXC_BAD_ACCESS. Mit animation auf NEIN gesetzt, es funktioniert großartig.
Vielen Dank für Ihre Hilfe.
Swift 3: dies ist, um zu verhindern, dass memory leaks in Swift 3 & 4