19

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

4

3 回答 3

25

请注意,关于 oxigen 答案的评论说 -drain 不会释放 NSAutoreleasePool 是不正确的。NSAutoreleasePool的文档清楚地表明 -drain 释放(并因此破坏)NSAutoreleasePool。

-drain 是对 NSAutoreleasePool 对象使用 -release 的替代品,唯一的区别是它为垃圾收集系统提供了提示。

于 2009-04-28T18:25:51.227 回答
10

如果您的系统有垃圾收集,则 -drain 发送消息 (objc_collect_if_needed) 用于 GC

如果你没有 GC,那么 drain = release

于 2009-04-28T11:33:55.477 回答
10

Oxigen 是对的,请参阅NSAutoreleasePooldrain方法的文档:

在引用计数环境中,释放和弹出接收器;在垃圾收集环境中,如果自上次收集后分配的内存大于当前阈值,则触发垃圾收集。

于 2009-04-28T11:45:03.000 回答