具有大量自动释放对象的线程如果是/否,在这种情况下是不是必须使用自动释放池,为啥?

Posted

技术标签:

【中文标题】具有大量自动释放对象的线程如果是/否,在这种情况下是不是必须使用自动释放池,为啥?【英文标题】:Thread with lot of autoreleased objectIs is it mandatory to use autorelease pool on this scenario if yes/no why?具有大量自动释放对象的线程如果是/否,在这种情况下是否必须使用自动释放池,为什么? 【发布时间】:2012-06-14 19:33:44 【问题描述】:

假设我们正在使用大量自动释放对象来实现自己的线程。如果是/否,是否必须在这种情况下使用自动释放池?

【问题讨论】:

【参考方案1】:

在any thread that you create 上必须有一个自动释放池,因为Cocoa internals expect 有一个,如果它不在那里,你会泄漏内存。

Cocoa 总是希望有一个可用的自动释放池。如果池不可用,则不会释放自动释放的对象,并且您的应用程序会泄漏内存。如果您在池不可用时发送自动释放消息,Cocoa 会记录适当的错误消息。


在 Objective-C 框架中链接的应用程序通常必须在其每个线程中创建至少一个自动释放池。

【讨论】:

嗯,这不是相当强制性的。完全定义了会发生什么:对象泄漏,消息被记录。虽然这通常不是你想要的,但这并不意味着它不可能是你想要的……【参考方案2】:

即使对于单个自动释放的对象也是强制性的,否则它会泄漏。

【讨论】:

以上是关于具有大量自动释放对象的线程如果是/否,在这种情况下是不是必须使用自动释放池,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 常驻线程

函数返回一个指向对象的指针,在这种情况下我应该返回啥?

安全的 NSArray 访问

C# WinForm 不抱错,自动退出的情况

目标 C:线程之间的自动释放对象?

可以在调用实例方法时释放 Objective-C 对象吗?