Objective-C垃圾收集器究竟收集了什么?例如,如果我在Objective-C 2.0中编写程序,并且使用一些普通的C结构,我的代码是否需要担心手动释放该内存?
答案 0 :(得分:12)
对于堆内存,默认情况下你是独立的。除非您使用NSAllocateCollectable
或NSReallocateCollectable
分配堆内存,或者通过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()
,那么是。
如果结构是在堆栈上创建的,那么就不需要收集,因为一旦帧退出就会被销毁。