2010-04-19 10 views

Odpowiedz

12

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/

+2

+1 Przewodnik programowania pobierania śmieci jest jednym z najbardziej fascynujących utworów technicznych, jakie kiedykolwiek czytałem. –

+0

NSAllocateCollectable to dokładnie to, czego szukałem, dzięki! –

5

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.

+0

+1 Dla wspomnieć, co dzieje się z kodowanym alokowane na stosie. –

Powiązane problemy