谁调用自动释放池

Posted

技术标签:

【中文标题】谁调用自动释放池【英文标题】:Who calls autorelease pool 【发布时间】:2015-06-21 01:18:37 【问题描述】:

或谁管理它。我在函数内部的变量上调用 autorelease,但是谁来管理这个 autorelease 调用、调用函数或调用函数,或者谁来管理?

【问题讨论】:

我不太清楚为什么会投反对票。这是一个涉及正确使用自动释放及其操作的合法问题。 (虽然它在文档中介绍..) 【参考方案1】:

首先,如果你说autorelease,不要。停止使用手动内存管理并使用 ARC。它比你知道的多。

好的,假设你autorelease。然后它被放置在自动释放池中,并且它的保留计数保持递增。当自动释放池耗尽时,它的保留计数将再次减少。 何时发生取决于您所谈论的自动释放池。

如果你真的创建了这个自动释放池,那么当你告诉 drain 时它就会耗尽。在 ARC 下,当我们到达 @autoreleasepool 指令块的末尾时就会发生这种情况。

如果它是默认的自动释放池,则运行时会处理它,而您对此一无所知或无法控制。您可以确定在您完成所有代码并且应用程序处于空闲状态后,将会有一个排水调用,但对此没有任何保证。

【讨论】:

我的书帮你理解自动释放机制:apeth.com/iosBook/ch12.html#_autorelease 感谢马特,我正在使用 ARC,但正在深入研究自动发布...所以问题... "然后这个对象的保留计数增加,它被放置在自动释放池中。"从技术上讲,在对象上调用autorelease 不会对其保留计数产生任何直接影响。虽然我猜从概念上讲,您可以将其视为“释放”它的调用范围与“保留”它的自动释放池相结合,从而抵消了。

以上是关于谁调用自动释放池的主要内容,如果未能解决你的问题,请参考以下文章

29-oc自动释放池

0c-35-自动释放池使用注意

如何耗尽当前的自动释放池?

第34条:以“自动释放池块”降低内存峰值

什么时候触发自动释放池

ios自动释放池