【问题标题】:Should I -drain or -release an autorelease pool in iPhone OS?我应该 -drain 还是 -release iPhone OS 中的自动释放池?
【发布时间】:2010-10-22 09:53:15
【问题描述】:

文档说:

在垃圾收集的环境中, 向池发送排水消息 触发垃圾收集,如果 必要的;然而,释放是一个 无操作。在引用计数中 环境,排水管也有同样的效果 作为释放。因此,通常情况下,您 应该使用 drain 而不是 release。

如果我做对了,他们说我应该总是使用 -drain,不管周围有垃圾收集还是引用计数。在 iPhone 上没有 GC,所以无论如何我发送 -drain?

不幸的是,文档只谈到了 Cocoa,而不是 Cocoa Touch 或 iPhone。所以我不确定那里是否同样适用。

【问题讨论】:

  • 医生应该去看医生^_^

标签: iphone memory-management uikit autorelease


【解决方案1】:

没关系,两者的效果是一样的。 Apple 建议您使用 Drain 以防您迁移到垃圾收集环境(如果 iPhone SDK 的未来版本支持它,或者如果您将其复制到 Mac OS X 项目中),所以我会这样做。

【讨论】:

    【解决方案2】:

    只需发送 -drain;如果在以后的某个日期 iPhone 有 GC,您将能够在不修改的情况下编译它。这是一个好习惯。

    【讨论】:

    • 谢谢。我有点想知道,因为 Apple 在 main() 函数 (main.m) 中向 ARP 发送了一个 -release。
    【解决方案3】:

    在正常开发中,无需在自动释放池上调用 drain - 当您的方法返回时,它无论如何都会这样做。

    例外情况是,如果您在循环中创建许多自动释放的对象,并且您有机会提前释放其中一些。

    如果您调用 drain 作为 release 的替代品,它不会释放尚未自动释放的对象。

    【讨论】:

      猜你喜欢
      • 2010-10-22
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多