Folgende Regeln sind einfach zu merken und führen zu einem "sauberen" Memory-Management in Objective-C Code:
Nie dealloc direkt aufrufen - es sollte immer release benutzt werden und damit wird dem System überlassen, wann es die Instanz "entsorgt".
Bei jedem selbstgeschriebenen Objekt ist die Methode dealloc zu überschreiben und alles freizugeben (release), das man selbst erzeugt oder zum "Behalten" (retain) markiert wurde. Am Ende der Methode muss auf jedenfall die dealloc-Methode der Basisklasse aufgerufen werden ([super dealloc]). Hinweis: In Objective-C ist es auch okey, Null-Objekte zu "releasen".
Methoden, bei denen man die Verantwortung zum Freigeben übernimmt:
Bemerkung: you do not own objects created by convenience methods...they are set to autorelease.
Verlust der Verantwortung wird erreicht, indem eine Instanz die einem gehört, wie folgt freigegeben wird:
Wichtig: Die Anzahl der Aufrufe, die einem die Verantwortung übertragen, muss der Anzahl der Aufrufe für die Freigabe der Instanzen übertragen.
Gemäss Empfehlung von Apple sollte eine solche Methode wie folgt aussehen:
- (void) setSomeObject: (NSObject*) aNewObject {
[aNewObject retain]; //#1
[myObject release]; //#2
myObject = aNewObject; //#3
}
#3 setzt die interne Variable auf das neue Objekt
#2 Dieser Aufruf wird getätigt, um ein allenfalls vorhandenes Objekt freizugeben. Dabei wird davon Gebrauch gemacht, dass in Objective-C ohne Konsequenzen auch Methoden von Null-Objekten aufgerufen werden können.
#1 Immer sicherstellen, dass für das übergebene Objekt die Verantwortung für das Speicherhandling übernommen wird
Tip: Sollte eine Variable an einem anderen Ort als in der dealloc-Methode freigegeben werden, ist es gute Praxis diese Variable auf nil zu setzen.
Quelle: http://iphonedevdocs.com/forum/showpost.php?p=932&postcount=4