为什么使用Autorelease池?

我知道在main方法中创建了一个autorelease池,并且接收autorelease消息的所有对象都存储在此池中,并在池消耗时释放。

但总是说避免自动释放对象来避免内存泄漏,进而导致应用程序崩溃。

那么为什么和在哪些条件下我们应该使用autoreleasepool?

Apple的文档建议我们在使用线程时需要使用它们,因此在线程开始时我们需要创建一个自动释放池,并在线程结束时将其耗尽,但如果我们不在完整版中创建autorelease对象线程然后在这种情况下也有必要在线程的开始创建一个autoreleasepool。

请清除我的困惑。 感谢名单。


你的假设是正确的。 当你可以确保一个特定的线程永远不会使用自动释放对象时,该线程就不需要一个自动释放池。

避免autoreleasepool是一个坏建议,硬币有两面。 使用autorelease'd对象会带来一定的开销(尽管在大多数情况下无关紧要),但应尽可能避免。 特别是在方法存在多个退出或者可能遇到异常的情况下,自动释放有助于避免内存泄漏并使代码更清洁。

但请注意,这意味着该线程无法使用autorelease,包括您可能调用的任何框架。 在某些情况下,例如在经典的生产者/消费者场景中。 你有一个生产者创建对象,将它们分派给主线程runloop,并且可以在主线程autoreleasepool中注册它们。

一般来说,我不建议在没有autoreleasepool的情况下创建一个执行重要工作的线程(除了一个简单的,长时间运行的计算)。

链接地址: http://www.djcxy.com/p/72753.html

上一篇: Why use Autorelease pool?

下一篇: How does the NSAutoreleasePool autorelease pool work?