Ich möchte etwas über Speicherverwaltung in Objective-C lernen, was ich nicht so einfach finde, weil ich ziemlich neu in Objective-C und ARC bin und meistens Skriptsprachen benutze, für die ich nicht muss so viel (oder gar nicht) mit der Speicherverwaltung zu tun haben.Wenn ein View-Controller geschlossen wird, sollte er den Speicher leeren?
Die App, an der ich arbeite, präsentiert einen ViewController (mit XIB-Datei angehängt) aus Code nach dem Drücken einer Taste. In diesem View-Controller habe ich mehrere Ansichten instanziiert; Ich nehme eine Sequenz von Bildern auf (Fotos von der Kamera, gespeichert auf der Festplatte), die ich in einen Film umwandele, und ich habe einen GPS-Tracker (mapKit), der eine kleine Karte auf dem Bildschirm anzeigt. Nachdem alles getan wird, kann ich ein ‚done‘ Knopf drücken, die [self dismissViewControllerAnimated:YES completion:nil];
ruft die Viewcontroller zurück zu meinem RootViewController animiert sind und weil ich legte eine NSLog
Mitteilung innerhalb der dealloc
Methode in dem Viewcontroller, dass ich diese Viewcontroller bestätigen kann entlassen werden wird freigegeben.
Das Problem ist, dass ich den Speicher steigen sehen nach der Verwendung der App (Nutzung besteht aus Aufnahmen und Aufnahme GPS-Positionen auf einer MapKit-Karte sowie das Erstellen einer Filmdatei) auf etwa 80 MB und das auf etwa sinkt 70MB, wenn ich "fertig" drücke, so dass der viewController die App beendet und die App zu meinem rootViewController zurückkehrt. Ich kann den gleichen viewController wieder präsentieren, benutze es und verlasse es, und die App wird immer noch rund 70MB Speicher belegen, der nicht abfällt. Das sieht für mich nicht wirklich wie ein Speicherleck aus, denn in diesem Fall würde ich mit jeder Instanziierung und Entlassung des viewControllers einen stetigen Speicheranstieg erwarten. Dies ist selbst dann nicht der Fall, wenn ich in meinem rootViewController verschiedene Schaltflächen habe, die alle eine neue und eindeutige Instanz meiner viewController-Klasse instanziieren.
Ich frage mich: Gibt es etwas, nach dem ich suchen sollte oder ist das erwartete Verhalten? Vielleicht speichert die App Klassen für die zukünftige Verwendung? Wenn die Speicherverwaltung richtig ausgeführt wird, sollte ich erwarten, dass eine App in den Zustand "jungfräulich" zurückkehrt (in diesem Fall wären es etwa 4 MB), nachdem der einzige dargebotene viewController abgelehnt wurde?
Profilieren Sie die App mit * Leaks * unter 'Instruments'. – trojanfoe
Fertig, keine Lecks erkannt. – Hype1
Vielleicht möchten Sie [diese Q & A] lesen (http://stackoverflow.com/q/12641658/335858), es spricht über MapKit Speicherproblem. Die Q & A ist jedoch alt, also könnte es angesprochen worden sein. – dasblinkenlight