为什么要排空自动释放池而不是释放它呢?
一个原因是为了垃圾回收(iPhone 上不可用)
启用 GC 后,release 是无效的,但 drain 提供了给垃圾回收器的提示
来自 文档:
垃圾回收
在垃圾回收环境中,不需要自动释放池。但是,您可能会编写旨在在垃圾回收和引用计数环境中工作的框架。在这种情况下,可以使用自动释放池来提示收集可能是适当的。在垃圾回收环境中,向池发送 drain 消息会在必要时触发垃圾回收;但 release 是无效的。在引用计数环境中,drain 与 release 具有相同的效果。因此,通常应使用 drain 而不是 release。
这里最好的答案是“因为苹果公司告诉你这样做”。
遵循苹果公司的“最佳实践”是提高向前兼容性的最佳方式。
-drain
是在10.4 SDK中添加的,特别是为了垃圾回收兼容性。 (垃圾回收在10.4中不可用,但部分基础工作已完成。) 必须以这种方式完成,因为无法在GC中覆盖-release
。 - Jens Aytondrain
在10.4中被添加为release
的同义词。这两个同义方法的原因是,苹果公司的GC实现使release
成为无操作,因此如果他们想要该方法在GC和MM环境下都能工作,就需要使用不同的选择器。 - Chuck