谁调用自动释放池
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
不会对其保留计数产生任何直接影响。虽然我猜从概念上讲,您可以将其视为“释放”它的调用范围与“保留”它的自动释放池相结合,从而抵消了。以上是关于谁调用自动释放池的主要内容,如果未能解决你的问题,请参考以下文章