views:

138

answers:

2

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?

+5  A: 

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.

Dave DeLong
+1 For mentioning what happens to structs allocated on the stack.
Quinn Taylor
+12  A: 

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/

Quinn Taylor
+1 the Garbage Collection Programming Guide is one of the most fascinating pieces of technical writing I've ever read.
Dave DeLong
NSAllocateCollectable is the exact thing I was looking for, thanks!
Ross Andrews