谁调用自动释放池

Who calls autorelease pool

谁调用自动释放池或谁管理它。我在函数内部的变量上调用了自动释放,但是谁管理这个自动释放调用、调用函数或调用函数,或者谁来管理?

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

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

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

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