2010-07-26 10 views

Antwort

3

Von den 4 Methoden, die Sie erwähnt haben, verwenden Sie normalerweise nur release und autorelease in objective-c. free vielleicht verwendet, wenn Sie c verwendet haben und malloc sonst sollten Sie release und autorelease verwenden.

dealloc sollte nicht von Ihrem Code aufgerufen werden, da dies den Retain/Release-Zyklus beeinträchtigen kann, den objective-c verwendet, um die Ressourcen zu überwachen. Die Verwendung von dealloc wird fast sicher zu Abstürzen zur Laufzeit führen, wenn Sie es jemals verwenden.

Die ultimative Ressource für die Verwendung des release und autorelease ist die Apple memory management documentation

3
  • free das Gegenteil von malloc ist und in C verwendet wird, werden Sie wahrscheinlich nicht sehr viel Programmierung verwenden in Objective C
  • Wenn Sie ein Objekt besitzen, release Sie es, wenn Sie mit ihm fertig sind
  • Sie können auch autorelease ein Objekt. Dies löst er automatisch am Ende des aktuellen Durchlaufs Schleifeniteration
  • Wenn der Referenzzähler auf einem Objekt auf Null abfällt, ruft die Laufzeit dealloc. Sie sollten diese Methode nicht nennen du

Sie „eigene“ ein Objekt, wenn Sie alloc, new, retain oder copy es.

Apple-some good documentation auf diesem bereitzustellen.

+1

Punkt 3: Ich würde es "Run-Loop-Iteration" anstelle von "Run-Loop" nennen. Punkt 4: Sicher, Sie wollten "Dealloc" statt "Release" sagen, nicht wahr? (Entschuldigung, pingelig) – Dirk

+0

Vielen Dank. Das war definitiv hilfreich. – ar106

+0

@Dirk Gute Stelle. Fest. –

17

free() ist eine C-Funktion, die Sie verwenden, um nicht mehr benötigten Speicher über oder andere Funktion, die dokumentiert ist, frei() zu löschen, um seinen Speicher z. strdup().

-dealloc ist ein Objective-C-Selektor, der durch die Objective-C Laufzeit an ein Objekt gesendet wird, wenn das Objekt nicht mehr von irgendeinem Teil der Anmeldung gehört.

-release ist der Selektor Sie auf ein Objekt senden, um anzuzeigen, dass Sie den Besitz des Objekts sind zu verzichten. Sobald ein Objekt niemandem gehört, wird ihm die Nachricht -dealloc von der Laufzeit gesendet.

-autorelease ist ein Selektor Sie an ein Objekt senden Sie verzichten Besitz des Objekts anzuzeigen. Wenn jedoch niemand das Objekt besitzt, wird das letzte -dealloc bis zu einem unbestimmten späteren Zeitpunkt zurückgestellt. In der Tat, was Sie wirklich tun, ist die Übertragung Ihres Eigentumsrechts auf einen Autorelease-Pool, der es dann freigibt, wenn es selbst freigegeben (oder ausgelaufen) ist.

Sie dürfen niemals -dealloc an ein Objekt senden, außer an super in der Objekt eigenen -dealloc Methode.

Verwandte Themen