2009-08-03 4 views

Antwort

0

Hinweis: Diese "Antwort" ist nur relevant für App beenden/Kündigung.

Laut der Antwort, die ich an my question erhalten habe, ist es überhaupt nicht notwendig, Aufräumarbeiten wie das Bereinigen von IBOutlets, zugewiesenen Objekten usw. auszuführen. Speichern Sie den Zustand (wenn nötig), wenn Ihre App beendet wird und lassen Sie das iPhone OS die endgültige Bereinigung durchführen.

+0

Das ist nicht wahr, weil eine Menge Dinge ersetzen, die nicht mehr verwendet werden, um lange entladen erhalten, bevor Ihre Anwendung beendet.Wenn Sie das nicht tun, verbraucht Ihre App viel Speicher. – Boon

+0

Ah, guter Punkt, danke. Ich habe die Antwort bearbeitet, um oben eine Erläuterung hinzuzufügen. – Elliot

0

Vergessen Sie nicht:

- (void)didReceiveMemoryWarning 
0

Beachten Sie, dass Ihre Frage ist schlecht ausgebildet. Die -dealloc Methode von UIApplication wird nie aufgerufen. Die -dealloc des Delegaten Ihrer Anwendung wird nie aufgerufen. Das bedeutet, dass alle Objekte, die vom Delegaten Ihrer Anwendung beibehalten werden, niemals freigegeben werden, sodass ihre dealloc nie aufgerufen wird.

Sie sollten applicationWillTerminate Ihre Bereinigung in Ihrer Anwendung Delegierten tun: Da Ihre Anwendung zu sterben ist etwa, die Sie nicht wirklich etwas tun müssen, außer Nicht-Speicher-Ressourcen zurück zu geben, Ihre Dateien sicher sind richtig geschlossen, und dass Ihre NSUserDefaults synchronisiert sind, damit Sie das nächste Mal ordnungsgemäß gestartet werden können, wenn Sie ausgeführt werden.

Jedes Objekt, das während der Laufzeit des Programms wiederholt zugewiesen und freigegeben werden kann, verdient jedoch eine von Apple dokumentierte Dejall-Methode, und es empfiehlt sich, dies für alle Klassen zu schreiben Sie werden nicht gerufen, nur damit Sie gute Gewohnheiten aufbauen und die Leser nicht verwirrt werden. Außerdem ersparen Sie in der Zukunft Wartungskopfschmerzen, wenn Sie DO mehrere davon erstellen und zerstören, zum Beispiel in Ihren Unit-Tests.

1

Für Ansichten, ich normalerweise alle UI-Widgets freigeben, die aus der NIB-Datei in ViewDidUnload erstellt wurden. Alle Modelle oder andere Objekte, die ich im Dealloc des ViewControllers bereinige.

Manchmal habe ich Ansichten, die ein Modell (sagen ein Dictionary von Abschnittsnamen zu Abschnittszeilen) von einem primären Datenobjekt erstellen. Wenn ich ein Objekt in viewDidLoad erstelle/erstelle, werde ich es in viewDidUnload veröffentlichen (da mein viewDidLoad wieder aufgerufen wird, wenn die Zeit reif ist).

Ich glaube, dass Sie in SDK 3+ nicht in der Regel sorgen müssen, didReceiveMemoryWarning direkt zu implementieren, da die neue viewDidUnload-Methode der wichtigste Ort ist, um Ihre Ansicht zu bereinigen.

Für normale Objekte (Objekte ohne spezielle Lebenszyklen wie ein View-Controller) lasse ich einfach ihre Member-Variablen im Dealloc frei.

0

würde ich die

[yourObject release]
Methode verwendet aber yourObject mit einem Objekt

Verwandte Themen