What exactly does the Objective-C garbage collector collect? For example, if I'm writing a program in Objective-C 2.0, and I use some plain C structs, does my code need to worry about manually freeing that memory?
If you use malloc()
to allocate a structure on the heap, then I really doubt it (the man page doesn't mention anything about it, but it's possible that Apple rewrote malloc
for the ObjC2 runtime). If you use NSAllocateCollectable()
, then yes.
If the structure was created on the stack, then there's no need for collection, since it will be destroyed as soon as the frame exits.
For heap memory, you're on your own by default. Unless you allocate heap memory with NSAllocateCollectable
or NSReallocateCollectable
, or explicitly hand a CoreFoundation object over to the garbage collector via an API like NSMakeCollectable
, the GC has no idea about your memory, and won't manage it for you. Conversely, when GC is enabled, Objective-C objects created with +alloc
/-init
are managed by GC unless you explicitly tell it otherwise with a complementary API call.
http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/GarbageCollection/