【发布时间】:2015-06-21 01:18:37
【问题描述】:
谁调用自动释放池或谁管理它。我在函数内部的变量上调用 autorelease,但是谁来管理这个 autorelease 调用、调用函数或调用函数,或者谁来管理?
【问题讨论】:
-
我不太清楚为什么会投反对票。这是一个涉及正确使用自动释放及其操作的合法问题。 (虽然它已在文档中介绍..)
标签: ios objective-c autorelease nsautoreleasepool
谁调用自动释放池或谁管理它。我在函数内部的变量上调用 autorelease,但是谁来管理这个 autorelease 调用、调用函数或调用函数,或者谁来管理?
【问题讨论】:
标签: ios objective-c autorelease nsautoreleasepool
首先,如果你说autorelease,不要。停止使用手动内存管理并使用 ARC。它比你知道的多。
好的,假设你做说autorelease。然后它被放置在自动释放池中,并且它的保留计数保持递增。当自动释放池耗尽时,它的保留计数将再次减少。 何时发生取决于您所谈论的自动释放池。
如果你真的创建了这个自动释放池,那么当你告诉 drain 时它就会耗尽。在 ARC 下,当我们到达 @autoreleasepool{} 指令块的末尾时就会发生这种情况。
如果它是默认的自动释放池,则运行时会处理它,而您对此一无所知或无法控制。您可以确定在您完成所有代码并且应用程序处于空闲状态后,将会有一个排水调用,但对此没有任何保证。
【讨论】:
autorelease 不会对其保留计数产生任何直接影响。虽然我猜从概念上讲,您可以将其视为“释放”它的调用范围与“保留”它的自动释放池相结合,从而抵消了。