Co dokładnie zbiera Collector śmieci Objective-C? Na przykład, jeśli piszę program w Objective-C 2.0 i używam prostych C-struktur, czy mój kod musi martwić się ręcznym zwolnieniem tej pamięci?Czy zbierania śmieci Objective-C 2.0 zbierać struktury C?
Odpowiedz
Pamięć sterty jest domyślnie włączona. Jeśli nie przydzielisz pamięci sterty z NSAllocateCollectable
lub NSReallocateCollectable
, lub jawnie przekażesz obiekt CoreFoundation do kosza ze śmieciami za pośrednictwem interfejsu API takiego jak NSMakeCollectable
, GC nie ma pojęcia o twojej pamięci i nie będzie nią zarządzać. Odwrotnie, gdy GC jest włączone, obiekty Object-C utworzone za pomocą +alloc
/-init
są zarządzane przez GC, chyba że wyraźnie powiesz inaczej w przypadku komplementarnego wywołania API.
http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/GarbageCollection/
Jeśli używasz malloc()
przydzielić struktury na stercie, potem naprawdę wątpienia (strona człowiek nie wspomina nic o tym, ale możliwe, że Apple przepisał malloc
do wykonywania ObjC2). Jeśli używasz NSAllocateCollectable()
, to tak.
Jeśli struktura została utworzona na stosie, nie ma potrzeby zbierania, ponieważ zostanie zniszczona, gdy tylko ramka się zakończy.
+1 Dla wspomnieć, co dzieje się z kodowanym alokowane na stosie. –
- 1. Czas zbierania śmieci Java?
- 2. Algorytm zbierania śmieci JVM
- 3. Czy gcc 4.8.1 ma obsługę C++ 11 do zbierania śmieci?
- 4. Czy Objective-C ma moduł do zbierania śmieci na iPhonie?
- 5. Niezwykle długie czasy zbierania śmieci
- 6. Podsumowanie ostatniej dekady zbierania śmieci?
- 7. Obiekty kwalifikujące się do zbierania śmieci
- 8. Zatrzymywanie zbierania śmieci dla niezarządzanego delegata
- 9. Narzędzie do zbierania śmieci dla dalvik
- 10. Jakie są "precyzyjne" algorytmy zbierania śmieci?
- 11. Odświeżenie przeglądarki nie powoduje zbierania śmieci
- 12. wyjątek scbl Sterty wyczerpane podczas zbierania śmieci
- 13. podłańcuchy i urządzenie do zbierania śmieci Go
- 14. Czy język nieinterpretowany może zawierać narzędzie do zbierania śmieci?
- 15. Czy powinniśmy używać "śmieci" do zbierania śmieci "stacji roboczej" lub "serwera"?
- 16. Przeciek pamięci podczas korzystania ze zbierania śmieci za pomocą glib
- 17. Czy są jakieś potencjometry odwołujące się do Pythona/wątki zbierania śmieci podczas pracy z kodem C?
- 18. Jakie algorytmy zbierania śmieci wykorzystują wszystkie 5 głównych przeglądarek?
- 19. W którym miejscu jest dokładnie dostępny obiekt do zbierania śmieci?
- 20. Czy mogę wykryć moment, w którym proces zbierania śmieci uruchamiany jest w .NET?
- 21. Czy mogę wymuszać odbiór śmieci w Javie?
- 22. Czy odśmiecacz będzie zbierać procedury Go, które nigdy nie będą kontynuowane?
- 23. Czy metoda zbierania śmieci CLR oznacza, że można bezpiecznie rzucać odwołania do obiektów kołowych?
- 24. Czy ten obiekt java kwalifikuje się do zbierania śmieci na liście
- 25. Czy istnieje maszyna JVM, która nie jest wyposażona w moduł do zbierania śmieci?
- 26. Haskell odpowiednik Scala zbierać
- 27. C# Timery i usuwanie śmieci
- 28. Wdrożenie ObjectiveC protokół w szybkim
- 29. Czy istnieje sposób na zawinięcie bloku ObjectiveC do wskaźnika funkcji?
- 30. jak zbierać informacje o systemie w osxie przy użyciu celu c
+1 Przewodnik programowania pobierania śmieci jest jednym z najbardziej fascynujących utworów technicznych, jakie kiedykolwiek czytałem. –
NSAllocateCollectable to dokładnie to, czego szukałem, dzięki! –