Objective-C垃圾收集 - 它有什么作用?

时间:2011-07-02 15:58:24

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

作为一名python程序员已经四年了(虽然这并不意味着太多)并且转向Objective-C,对我来说一个奇怪且“异类”的概念是内存管理。幸运的是垃圾收集存在,我只打算为mac OS 10.6+开发应用程序,所以在我的所有项目中,到目前为止,我总是将垃圾收集转为必需。但这是我的问题:当我使用带有Alloc和Leaks工具的Instruments时,我会在图中看到泄漏的字节poppin。 ???很奇怪。垃圾收集在需要时真正做了什么。我看待它的方式是你可以完全忘记保留,释放等等。但这是真的吗?请提供GC将提供帮助的示例以及不提供帮助的示例(如果有的话),以便我能够理解我做错了什么。

修改

我可能应该更清楚。我想解决的问题是,即使根据需要设置了GC,仪器仍然会发现泄漏。我还问过GC做了什么,所以我可以确保它符合我的想法,问题不在我的代码或GC中,而是在其他地方。 “其他地方”就是我想要找到的。

2 个答案:

答案 0 :(得分:0)

如果您有时间等待释放下一版Xcode(与Lion一起),您可以直接转到ARC (Automatic Reference Counting)

ARC将 - 在中间运行中 - 替换OS X和iOS中的GC。

如果您是注册的Apple开发人员,可以在WWDC2011视频中查看有关ARC的演示文稿。

答案 1 :(得分:0)

一个简单的答案你的问题是,当你有分配给内存的变量或对象时,GC会为你清理乱七八糟的东西。鉴于;在iPhone和iPad应用程序中,您必须自己清理它,因为GC不存在。

示例:

NSArray* arr = [[NSArray alloc] init]; // Allocated to memory
[arr release]; // released from memory