如果我正在使用GCD,我应该创建@autorelease池

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果我正在使用GCD,我应该创建@autorelease池相关的知识,希望对你有一定的参考价值。

我已经阅读了很多关于何时使用@autorelease池的stackoverflow讨论,当你在应用程序中创建一个辅助线程时,有人建议编写自己的@autorelease池,并且有一些关于这个的讨论描述你不需要创建@autorelease池,当我使用GCD时,我是否需要创建外部@autorealease池?

所以请在这里任何一个人,纠正我关于@autorelease的情况。

答案

如果您的块创建了多个Objective-C对象,您可能希望将块的代码部分包含在@autorelease块中,以处理这些对象的内存管理。

尽管GCD调度队列具有自己的自动释放池,但它们无法保证这些池何时耗尽。如果您的应用程序受内存限制,则创建自己的自动释放池允许您以更加规则的间隔释放自动释放对象的内存。

因此,如果您只分配一些对象,请不要担心。但是,如果要分配任意数量的对象(并且因为您的目标是内存受限环境),那么您应该创建和排空池。

以上是关于如果我正在使用GCD,我应该创建@autorelease池的主要内容,如果未能解决你的问题,请参考以下文章

如何通过创建本地上下文将 GCD 与 Core Data 一起使用

使用 Parse 时 GCD 串行队列似乎没有串行执行

GCD 中的并发队列与串行队列

使用 GCD 的核心数据

使用 GCD 和 Core Data 会导致崩溃

如何在 GCD 中停止 DispatchWorkItem?