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

9

Objective-C 垃圾回收器到底回收什么?比如说,如果我在 Objective-C 2.0 中编写程序,并且使用一些普通的 C 结构体,那么我的代码是否需要手动释放该内存?

2个回答

12
默认情况下,对于堆内存的管理需要自行处理。除非你使用NSAllocateCollectableNSReallocateCollectable函数分配堆内存,或者通过NSMakeCollectable等API将CoreFoundation对象显式地交给垃圾回收器,否则GC将不知道您的内存,并且无法为您进行管理。相反,当启用GC时,使用+alloc/-init创建的Objective-C对象将由GC进行管理,除非您使用相应的API调用明确告诉它不要这样做。
参考文献:http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/GarbageCollection/

2
+1 垃圾回收编程指南是我曾经阅读过的最迷人的技术写作之一。 - Dave DeLong
NSAllocateCollectable正是我正在寻找的东西,谢谢! - Ross Andrews

5
如果你使用 malloc() 在堆上分配一个结构体,那么我真的怀疑它(man页面没有提到任何关于它的内容,但是苹果可能为ObjC2运行时重写了malloc)。如果你使用 NSAllocateCollectable(),那么是的。
如果这个结构体是在栈上创建的,那么不需要进行收集,因为它将在框架退出时被销毁。

+1 提到了在堆栈上分配的结构体会发生什么。 - Quinn Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接