Czy ktoś może wyjaśnić różnice między free()
, release
, autorelease
i dealloc
?Jakie są różnice między wolnymi, dealloc, release i autorelease?
Odpowiedz
Z 4 metod, o których już wspomniałeś, zwykle używasz tylko obiektywów o wartości release
i autorelease
. free
może być używany, gdy używasz c i malloc
w przeciwnym razie powinieneś używać release
i autorelease
.
dealloc
nie powinien być wywoływany przez żaden kod, ponieważ może kolidować z cyklem zatrzymywania/zwolnienia, którego cel-c używa do śledzenia zasobów. Korzystanie z dealloc
prawie na pewno spowoduje awarie w środowisku wykonawczym, jeśli kiedykolwiek z niego skorzystasz.
Ostatecznym zasób użycia release
i autorelease
jest Apple memory management documentation
free
jest przeciwieństwemmalloc
i jest stosowany w C. Nie będzie prawdopodobnie użyć to bardzo programowania w Objective C- Jeśli jesteś właścicielem obiektu, po jego zakończeniu można go ustawić jako obiekt
- . Można również ustawić obiekt jako
autorelease
. Powoduje to automatyczne zwolnienie go po zakończeniu bieżącej pętli iteracji - Gdy licznik odniesień na obiekcie spada do zera, środowisko wykonawcze wywołuje
dealloc
. Nie powinno wywołać tę metodę bardziej
You "własny" przedmiot jeśli alloc
, new
, retain
lub copy
go.
Firma Apple zapewnia na ten temat some good documentation.
free()
to funkcja C, której używa się do pozbycia się niepotrzebnej pamięci uzyskanej za pomocą malloc()
lub innej funkcji, która ma udokumentować, że wymaga wolnej() do zwolnienia pamięci, np. strdup()
.
-dealloc
to selektor Objective-C, który jest wysyłany przez środowisko wykonawcze Objective-C do obiektu, gdy obiekt nie jest już własnością żadnej części aplikacji.
-release
jest selektor wysyłane do obiektu, aby wskazać, że jesteś rezygnując własności tego przedmiotu. Gdy obiekt nie jest własnością nikogo, jest wysyłany komunikat o błędzie -dealloc
przez środowisko wykonawcze.
-autorelease
jest selektor wysyłane do obiektu, aby wskazać, że są rezygnując własność obiektu. Jednakże, jeśli nikt nie jest właścicielem obiektu, ostateczna -dealloc
zostanie odłożona na później, aż do jakiegoś nieokreślonego późniejszego punktu. Rzeczywiście, to, co naprawdę robisz, to przenoszenie własności na pulę autorelease, która następnie zwolni ją, gdy sama zostanie wydana (lub wyczerpana).
Nie można nigdy wysyłać obiektu -dealloc
do obiektu z wyjątkiem super
w metodzie obiektu -dealloc
.
- 1. Jakie są różnice między PECL i PEAR?
- 2. Jakie są różnice między Haskell i PureScript?
- 3. Jakie są różnice między Conda i Anaconda
- 4. Jakie są różnice między @dynamic i @synthesize?
- 5. Jakie są różnice między LinFu.DynamicProxy i Castle.DynamicProxy?
- 6. Jakie są różnice między utf8_general_ci i utf8_unicode_ci?
- 7. Autorelease vs. Release
- 8. Jakie są różnice między std :: move i unique_ptr :: reset?
- 9. iPhone SDK: Dealloc vs. Release?
- 10. Jakie są różnice między MPI a OpenMP?
- 11. Jakie są różnice między możliwościami obliczeniowymi CUDA?
- 12. Jakie są różnice między postem a stroną
- 13. Jakie są różnice między przerwą a wyjściem?
- 14. Jakie są różnice między typedef a używaniem?
- 15. Jakie są różnice między programem a aplikacją?
- 16. Jakie są podstawowe różnice funkcji/architektury między BEAM i JVM?
- 17. Jakie są różnice między zakresami leksykalnymi i statycznymi?
- 18. Jakie są główne różnice między Sinatrą i Ramaze?
- 19. Jakie są podstawowe różnice między zestawem i didSet?
- 20. Jakie są kluczowe różnice między Meteor, Ember.js i Backbone.js?
- 21. Jakie są niezgodne różnice między C (99) i C++ (11)?
- 22. Jakie są różnice między RedrawWindow i UpdateWindow w Win32?
- 23. Jakie są różnice między HasOne i References w nhibernate?
- 24. Jakie są różnice między Apache Spark i Apache Apex?
- 25. Jakie są różnice między & a &&, | i || w R?
- 26. Jakie są różnice między JSP, PHP, HTML5 i javascript?
- 27. Jakie są różnice między modelami pudełkowymi CSS i Latex?
- 28. Jakie są główne różnice między dialektami sql mysql i oracle?
- 29. jakie są różnice między r i rb w fopen
- 30. Jakie są różnice między prezenterem, modelem prezentacji, ViewModel i kontrolerem?
Punkt 3: Nazwałbym to "iteracją pętli biegu" zamiast "pętlą uruchomieniową". Punkt 4: Oczywiście, miałeś zamiar powiedzieć "dealloc" zamiast "release", nieprawdaż? (przepraszam, nitpicking) – Dirk
Dziękuję bardzo. To było zdecydowanie pomocne. – ar106
@Dirk Dobre miejsce. Naprawiony. –