【问题标题】:Objective-C [on OS X Leopard] Garbage Collection, nil QuestionObjective-C [on OS X Leopard] 垃圾收集,无问题
【发布时间】:2011-07-18 21:36:30
【问题描述】:

我有一个关于 Objective-C 中的垃圾回收的问题

如果我有一个对象,我们就称它为“A”。并且“A”包含指向其他多个对象的实例变量。如果我将指向 A 的指针设置为 nil,垃圾收集器是否会理解“A”中包含的所有内容现在也未使用并处理清理工作?或者我是否还需要明确地将所有实例变量设为“A”nil 才能进行内存清理?

【问题讨论】:

  • 虽然一些用于objective-C的垃圾收集器,但标准方法是使用手动引用计数 [保留/释放]作为一些更自动化的方法,如自动释放池。为了获得更好的答案,应该在问题中提及确切的 Objective-c 运行时(iOS、Leopard、GNU?)。
  • 我知道手动内存管理,但对于我正在从事的这个特定项目,我更喜欢进行垃圾收集。目标平台是 Leopard+。
  • 在 Mac OS X 上,Objective-C 支持全自动垃圾回收已经有一段时间了。

标签: objective-c cocoa memory garbage-collection


【解决方案1】:

是的,它确实有效;收集器知道对象的子图,可能复杂地相互连接,不再与活动对象有任何连接是垃圾。

收集器也进行全周期检测。

【讨论】:

    【解决方案2】:

    是的,绝对可以。

    但是,请注意,垃圾回收是不确定的,也就是说,不知道它何时会运行。

    因此,当您将指针设为 nil 时,您需要调用的任何析构函数都不会立即被调用。

    如果对象“A”是或持有对文件对象、数据库对象、连接对象等的引用,那么您将需要使用引用计数来确保立即释放这些对象。

    否则,使用 GC;不那么痛苦了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多