Objective-C 2.0垃圾收集是否收集C结构?

时间:2010-04-19 18:21:21

标签: c objective-c memory-management garbage-collection struct

Objective-C垃圾收集器究竟收集了什么?例如,如果我在Objective-C 2.0中编写程序,并且使用一些普通的C结构,我的代码是否需要担心手动释放该内存?

2 个答案:

答案 0 :(得分:12)

对于堆内存,默认情况下你是独立的。除非您使用NSAllocateCollectableNSReallocateCollectable分配堆内存,或者通过NSMakeCollectable等API将CoreFoundation对象显式传递给垃圾收集器,否则GC不知道您的内存,并赢了不管你怎么做。相反,启用GC时,使用+alloc / -init创建的Objective-C对象由GC管理,除非您通过补充API调用明确告知它。

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/GarbageCollection/

答案 1 :(得分:5)

如果你使用malloc()在堆上分配一个结构,那么我真的怀疑它(该手册页没有提及它的任何内容,但Apple可能会重写{ {1}}用于ObjC2运行时)。如果您使用NSAllocateCollectable(),那么是。

如果结构是在堆栈上创建的,那么就不需要收集,因为一旦帧退出就会被销毁。