【发布时间】:2010-10-22 07:07:25
【问题描述】:
在许多书籍和许多网站上,我都看到了 -drain。好吧,对于一个听起来很酷的自动释放池。但它除了发布之外还有其他作用吗?我猜 -drain 只是让 Pool 释放它的所有对象,而不释放 Pool 本身。只是猜测。
【问题讨论】:
标签: iphone cocoa cocoa-touch memory-management autorelease
在许多书籍和许多网站上,我都看到了 -drain。好吧,对于一个听起来很酷的自动释放池。但它除了发布之外还有其他作用吗?我猜 -drain 只是让 Pool 释放它的所有对象,而不释放 Pool 本身。只是猜测。
【问题讨论】:
标签: iphone cocoa cocoa-touch memory-management autorelease
请注意,关于 oxigen 的回答中的 cmets 说 -drain 不会释放 NSAutoreleasePool 是不正确的。 documentation for NSAutoreleasePool 明确表示 -drain 释放(并因此破坏)NSAutoreleasePool。
-drain 是对 NSAutoreleasePool 对象使用 -release 的替代品,唯一的区别是它为垃圾收集系统提供了提示。
【讨论】:
氧气是对的,参见NSAutoreleasePool的方法drain的文档:
在引用计数环境中, 释放和弹出接收器;在一个 垃圾收集环境, 触发垃圾收集,如果 自上次分配的内存 集合大于当前 阈值。
【讨论】:
如果你的系统有垃圾回收,那么 -drain 为 GC 发送消息 (objc_collect_if_needed)
如果你没有GC,那么drain = release
【讨论】: