Hintergrund:iPhone Entwicklung - Simulieren Speicher Warnung
ich eine Tab-Leiste Anwendung haben. Jede Registerkarte enthält einen Navigationscontroller, der es dem Benutzer ermöglicht, von einer Ansicht zur anderen zu wechseln und eine Drilldown-Information der Daten zu zeigen (jede Ansicht wird von einem Ansichtscontroller gehandhabt und jede Sichtkontrollklasse hat die Methode didReceiveMemoryWarning
). Listen werden ausgefüllt, indem die Daten aus den Webdiensten abgerufen werden.
Problem:
Wenn i „Hardware> Speicher Warnung Simulieren“ verwenden Option von iPhone Simulator, die didReceiveMemoryWarning
Methode ist für alle meine Ansicht-Controller genannt - auch die, die der Benutzer sieht. Ich möchte keinen Inhalt löschen, der vom aktiven Ansichtscontroller verwendet wird. Wie kann ich das erreichen?
Welche Methode sollte die Implementierung haben, um die Daten neu zu laden, nachdem die Daten wegen Speicherwarnung freigegeben wurden? (Ich sehe, dass die View-Controller-Klassen, die eine Tabellenansicht Aufruf viewDidLoad
Methode enthalten, wenn der Benutzer zu dieser Ansicht kommt zurück, aber wenn die Ansicht enthält (etwa UIWebView) dann viewDidLoad
Methode nicht aufgerufen wird. Warum ist das so?)
bearbeitet (freitag, 30. Januar 2009 - 15.10 Uhr)
. (Anmerkung: ich bin für die Erstellung von Ansichten Interface Builder verwenden und loadView
Methode kommentiert out)
Also, wenn ein view-Controller empfängt eine Speicher-Warnmeldung, dies sind die Schritte, die ausgeführt werden:
folgende Verfahren genannt:
- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; }
Als Ergebnis des Aufrufs
[super didReceiveMemoryWarning]
, wird[self setView:nil]
automatisch aufgerufen?Wenn Ressourcen gelöscht werden sollen, sollte die Methode
setView
überschrieben werden, um die lokalen Ressourcen zu löschen.[self setView:nil]
wird nicht aufgerufen, wenn die Ansicht gerade aktiv ist (Standardeinstellung). Recht? - Ich bin wirklich gespannt, welche Methode diese Entscheidung trifft und wie?
Können Sie bitte bestätigen. Plus, ich bekam einen Fehler nach diesem Ansatz, aber myObject = nil
nach der Freigabe myObject
in dealloc
Methode der Controller-Klasse hinzugefügt behoben das Problem. Vielen Dank.
Auch wenn ich didReceiveMemoryWarning Methode nicht außer Kraft setzen, ist meine Ansicht gelöscht. Warum das? – Mustafa
Kein Überschreiben bedeutet, dass Sie das von UIViewController implementierte Standardverhalten erhalten, nämlich Ihre Sicht zu löschen. Wenn Ihre Überschreibung einfach die Super-Implementierung aufruft, ist das das gleiche wie überhaupt keine Überschreibung. –