【问题标题】:Objective-C Garbage Collection - What does it do?Objective-C 垃圾收集 - 它有什么作用?
【发布时间】:2011-07-02 15:58:24
【问题描述】:

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

编辑

我可能应该更清楚。我要解决的问题是,即使按要求设置了 GC,Instruments 仍然会发现泄漏。我还问了 GC 是做什么的,这样我才能确保它按照我的想法去做,问题不在于我的代码或 GC,而在于其他地方。那个“其他地方”是我想知道的。

【问题讨论】:

  • 你看过官方文档developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/… 吗? 除了官方文档,您还想要哪些信息?
  • 好吧,除了澄清 GC 的作用之外,我还想指出一个原因,即使在需要 GC 之后,Instruments 仍然会在我的代码中看到泄漏。
  • 哪个对象被泄露了?您是否使用过任何 CoreFoundation 函数,例如 CF...Create...
  • 除非您发布代码,否则我们无法回答有关您的代码为何显示泄漏的问题,正如@Yuji 在第一条评论中暗示的那样,这是一个过于宽泛和模糊的问题。请发布另一个问题,询问您的代码并尝试编辑此问题以解决特定问题。

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


【解决方案1】:

如果有时间等Xcode下一个版本发布(和Lion一起),可以直接移步ARC (Automatic Reference Counting)

ARC 将在中间运行中取代 OS X 和 iOS 中的 GC。

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

【讨论】:

  • 好吧,我有 Xcode 4,但我使用的是 10.6。我不认为我有那个。与此同时,ARC到底做了什么?它真的是“没有开销的垃圾收集的所有优点”吗?我已经编辑了我的问题,请再次检查。
【解决方案2】:

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

例子:

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

【讨论】:

  • 这就是我的想法,但我的代码中仍然存在泄漏。请再次查看我的问题,我已经更新了。
  • 您好,您需要告诉我们 Instruments 报告哪些对象被泄露。例如,您能否上传 Instruments 报告?我们不是能读懂你代码的通灵者!
  • @Yuji 好吧,你完全正确!顺便说一句,我也不是 :) Here 是下载网址。请只看第一次运行。第二个什么都没有。非常感谢! PS:如果你在其中发现太多的 CF/NSString:被分析的应用程序会分析用户给出的字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多