gpt4 book ai didi

ios - 自动释放池什么时候耗尽?

转载 作者:可可西里 更新时间:2023-11-01 05:28:05 25 4
gpt4 key购买 nike

我研究手动内存管理,我想知道自动释放池何时耗尽。

我发现有3种情况:1 - 在 main.m 中,从应用程序运行开始,一直到结束,因此释放内存中的所有对象。2 - 当您显式地手动创建一个自动释放池并耗尽它时

第三种情况是我要的,它让我有点困惑。

据我研究,autorelease 对象就像 C 中的自动变量,仅存在于逻辑范围内(在函数体中)。因此,我假设在每个函数之后都有一个隐藏的 [pool drain];

但是,有人向我指出,这并不像我想的那样正确。 Apple 表示,它会在“事件”后耗尽。该事件可能会在用户点击按钮时发生,例如重新加载 TableView 。

但是这些信息不足以了解全貌。你能为我澄清一下,什么时候池会完全耗尽对象,比如 NSArray *arr = [NSArray array];

最佳答案

文档没有具体说明“主”自动释放池何时耗尽,但通常您可以假设它在应用程序的主事件循环结束时耗尽。

以下是关于自动释放池的情况:

  1. 在应用程序启动时创建一个自动释放池。
  2. 当另一个池被创建时,它被添加到自动释放池堆栈的顶部。
  3. autorelease 被发送到一个对象时,它被添加到堆栈顶部的自动释放池中。
  4. release 被发送到自动释放池时,它会依次将 release 发送到池中的任何对象。

#4 通常在主事件循环结束时自动发生(对于主自动释放池)。

NSAutoreleasePool 的文档有更多信息,包括这个相关的花絮:

The Application Kit creates an autorelease pool on the main thread at the beginning of every cycle of the event loop, and drains it at the end, thereby releasing any autoreleased objects generated while processing an event.

关于ios - 自动释放池什么时候耗尽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30515230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com