Es gibt keine Garbage Collection-Funktion. Jedoch hat jedes Objekt, das Sie copy
, retain
, alloc
usw. haben, seine Retain-Zählung um eins erhöht, und Sie sind verantwortlich für den Aufruf einer release
oder autorelease
- Sie besitzen eine Instanz dieses Objekts. Wenn Sie nicht [<YOUROBJECT> release];
oder [<YOUROBJECT> autorelease];
nennen, bleibt das Objekt in dem iPhone/iPod Touch/die iPad-Speicher, aber der Zeiger nicht mehr bleibt, und ein Speicherverlust tritt auf, da die Bit-Speicher nicht mehr zugegriffen werden kann. Autoreleasing fügt das Objekt dem Autorelease-Pool hinzu und bedeutet, dass es irgendwann in der Zukunft veröffentlicht wird. Verwenden Sie immer eine Standard-release
wo möglich, als autorelease
bedeutet, dass es noch im Speicher des Geräts für eine Weile bleiben, können Sie nie sicher sein, wenn es freigegeben wird, und es ist eine etwas anspruchsvollere Methode aufzurufen.
Rufen Sie nie dealloc
auf ein Objekt - Freigabe oder Autoreleasing ist ausreichend, und bei Bedarf wird das Objekt automatisch entfernt.
Stellen Sie sicher, dass Sie niemals Objekte freigeben, die Sie nicht besitzen. Wenn Sie Objekte freigeben, geben Sie sie frei, nachdem Sie sie nicht mehr verwenden. Andernfalls können Sie versuchen, auf dieses Objekt zuzugreifen das Objekt und die Situation Ergebnisse in Ihrer Anwendung aufgrund eines EXEC_BAC_ACCESS
Fehler Absturz -, um die Wurzel des Problems, offene Instruments herauszufinden, die Objektzuordnung Instrument hinzufügen und NSZombie Erkennung in seinen Präferenzen (oder fügen Sie die Zombies Instrument (nur aktivieren in iPhone SDK 3.2 +)). Sie können dann den gesamten Verlauf des Objekts anzeigen, das das Problem verursacht, und zu der genauen Codezeile springen, die das Problem verursacht hat.
können Sie mehr here lesen.
Hoffe das half