Kann jemand die Unterschiede zwischen free()
, release
, autorelease
und dealloc
erklären?Was sind die Unterschiede zwischen Frei, Dealloc, Release und Autorelease?
Antwort
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
free
das Gegenteil vonmalloc
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.
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.
- 1. Release, Dealloc und die Selbstreferenz
- 2. Was sind die Unterschiede zwischen Gleitern und Programmierern?
- 3. Über Autorelease/release und [Pool release]
- 4. Autorelease vs. Release
- 5. Was sind die Unterschiede zwischen zweien?
- 6. Was sind die Unterschiede zwischen Karma Reportern?
- 7. ARC Referenzzählung Dealloc und Release
- 8. Was sind die Unterschiede zwischen & und &&, | und || in R?
- 9. Was sind die Unterschiede zwischen PECL und PEAR?
- 10. Was sind die Unterschiede zwischen Active Record und Repository-Muster?
- 11. Graph - Was sind die Unterschiede zwischen eingebetteten und topologischen Graphen?
- 12. Was sind die Unterschiede zwischen C und C++ Aufrufkonventionen?
- 13. Was sind die Unterschiede zwischen Vanille Perl und Strawberry Perl?
- 14. Was sind die Unterschiede zwischen LDAP und Active Directory?
- 15. Was sind die Unterschiede zwischen WCF und traditionellen ASP.NET Web
- 16. Was sind die Unterschiede zwischen to.equal (true) und to.be.true?
- 17. Was sind die Unterschiede zwischen WebAPI und WebAPI 2
- 18. Was sind die Unterschiede zwischen HasOne und Referenzen in Nhibernate?
- 19. Was sind die Unterschiede zwischen .pem, .cer und .der?
- 20. Was sind die größten Unterschiede zwischen fopen und curl?
- 21. Was sind die Unterschiede zwischen LLVM und Java-Bytecode?
- 22. Was sind die praktischen Unterschiede zwischen Fliegengewicht und Singleton-Mustern?
- 23. Was sind die Unterschiede zwischen flex mxml und actionscript-3?
- 24. Was sind die Unterschiede zwischen ADOdb und PDO in PHP?
- 25. Was sind die Unterschiede zwischen WebServiceBinding.EmitConformanceClaims und WebServiceBinding.ConformanceClaims?
- 26. Was sind die Unterschiede in JIT zwischen Java und. NET
- 27. Was sind die Unterschiede zwischen Pause und Ausfahrt?
- 28. Was sind die Unterschiede zwischen R.styleable, R.style und R.attr?
- 29. Was sind die Unterschiede zwischen struct_time und datetime?
- 30. Was sind die Unterschiede zwischen Layern und erweiterbaren Effekten?
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
Vielen Dank. Das war definitiv hilfreich. – ar106
@Dirk Gute Stelle. Fest. –