Ross Andrews
Ross Andrews

Reputation: 153

Does Objective-C 2.0 garbage collection collect C structures?

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?

Upvotes: 9

Views: 519

Answers (2)

Quinn Taylor
Quinn Taylor

Reputation: 44769

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/

Upvotes: 12

Dave DeLong
Dave DeLong

Reputation: 243156

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.

Upvotes: 5

Related Questions