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

Tha*_*nks 19 iphone cocoa cocoa-touch memory-management autorelease

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

smo*_*gan 25

请注意,对oxigen的回答的评论说-drain不释放NSAutoreleasePool是不正确的.NSAutoreleasePool文档明确指出-Drain释放(并因此破坏)NSAutoreleasePool.

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


oxi*_*gen 10

如果您的系统有垃圾收集,那么-drain为GC发送消息(objc_collect_if_needed)

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


zou*_*oul 10

Oxigen是正确的,请参阅方法的文档drainNSAutoreleasePool:

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