Wenn meine iPhone-App eine Speicherwarnung erhält, werden die Ansichten von UIViewControllern, die momentan nicht sichtbar sind, entladen. In einer bestimmten Steuerung ist das Entladen der Sicht und der Ausgänge eher fatal.UIViewController verhindert, dass die Anzeige entladen wird
Ich bin auf der Suche nach einer Möglichkeit zu verhindern, dass diese Ansicht entladen wird. Ich finde dieses Verhalten ziemlich blöd - ich habe einen Cache-Mechanismus, also wenn eine Speicherwarnung kommt - ich entlade sehr viele Daten und ich habe genügend Speicher frei, aber ich brauche diese Ansicht definitiv nicht.
Ich sehe, UIViewController hat eine Methode unloadViewIfReloadable
, die aufgerufen wird, wenn die Speicherwarnung kommt. Weiß jemand Cocoa Touch, dass meine Ansicht nicht nachladbar ist?
Haben Sie noch weitere Vorschläge, wie Sie verhindern können, dass meine Ansicht in der Speicherwarnung gelöscht wird?
Vielen Dank im Voraus
Apple-Dokumentation zu der Ansicht Lebenszyklus eines View-Controller sagt:
didReceiveMemoryWarning - Die Standard Implementierung nur die Sicht freigibt wenn es, dass es bestimmt ist sicher zu tun so
Jetzt ... Ich überschreibe die didReceiveMemoryWarning
mit einer leeren Funktion, die nur NSLog anruft, um mir mitzuteilen, dass eine Warnung empfangen wurde. Allerdings - die Ansicht wird trotzdem gelöscht. Plus, nach welchen Kriterien genau entschieden wird, ob eine Ansicht sicher entladen werden kann ... oh! so viele Fragen!
Vielleicht sollten Sie Ihr Design so umgestalten, dass die Teile, die nicht freigegeben werden müssen, Teil eines separaten permanenten Objekts sind, das nicht Teil der Ansicht selbst ist. –
Hallo David, es gibt eine ganze Hierarchie von Ansichten auf dem Bildschirm, und ich möchte es nicht abreißen und dann wieder aufbauen, während ich oben einen modalen Viewcontroller zeige ... ist das kein Overkill? –
Ich liebe die Lösung von @umpo, aber Jungs, dieser Code führt zu einer Laufzeitwarnung wie das 'MyViewController-Implementierung von -viewDidUnload verursacht die Ansicht neu geladen werden. Dies wird sich negativ auf die Systemleistung auswirken. - ignorieren Sie es einfach oder tun Sie etwas dagegen? – matm