在许多书籍和许多网站上,我看到了--Drain。好吧,对于一个听起来很酷的自动释放池。但它除了发布之外还做了什么吗?我猜--Drain只是让Pool释放所有它的对象,而不释放Pool本身。只是一个猜测。
答案 0 :(得分:25)
请注意,对oxigen的回答的评论说-drain不释放NSAutoreleasePool是不正确的。 documentation for NSAutoreleasePool清楚地说明了-Drain释放(并因此破坏)NSAutoreleasePool。
-drain是对NSAutoreleasePool对象使用-release的替代,唯一的区别是为垃圾收集系统提供了一个提示。
答案 1 :(得分:10)
如果您的系统有垃圾收集,那么-drain为GC发送消息(objc_collect_if_needed)
如果您还没有GC,那么drain = release
答案 2 :(得分:10)
Oxigen是对的,请参阅NSAutoreleasePool的方法drain
的文档:
在参考计数环境中, 释放并弹出接收器;在一个 垃圾收集环境, 如果是,则触发垃圾收集 自上次分配的内存 集合大于当前 阈值。