发送-release或-drain与自动释放池有什么区别?

时间:2009-04-28 11:28:35

标签: iphone cocoa cocoa-touch memory-management autorelease

在许多书籍和许多网站上,我看到了--Drain。好吧,对于一个听起来很酷的自动释放池。但它除了发布之外还做了什么吗?我猜--Drain只是让Pool释放所有它的对象,而不释放Pool本身。只是一个猜测。

3 个答案:

答案 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的文档:

  

在参考计数环境中,   释放并弹出接收器;在一个   垃圾收集环境,   如果是,则触发垃圾收集   自上次分配的内存   集合大于当前   阈值。