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

我发现了3种情况:
1-在main.m中,从应用程序运行开始并最终耗尽,因此释放了内存中的所有对象。
2-当您手动明确创建自动释放池并将其耗尽时

第三种情况是我要的,这让我感到困惑。

正如我研究的那样,自动释放对象就像C中的自动变量一样,仅存在于逻辑范围内(在函数体内)。因此,我想在每个函数之后都有一个隐藏的[pool drain];
但是,有人向我指出,这不符合我的想法。苹果公司说,“事件”发生后,它就会流失。例如,当用户单击按钮,重新加载表 View 时,可能会发生该事件。

但是,这些信息不足以查看整个图片。您能为我澄清一下,什么时候池中的对象(例如NSArray *arr = [NSArray array];)完全流失了?

最佳答案

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

关于自动释放池,将发生以下情况:

  • 应用程序启动时会创建一个自动释放池。
  • 创建另一个池时,它将添加到自动释放池堆栈的顶部。
  • autorelease发送到对象时,它会添加到堆栈顶部的自动释放池中。
  • release发送到自动释放池时,它又将release发送到池中的任何对象。

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

    NSAutoreleasePool 的文档提供了更多信息,包括以下相关提示:

    10-07 19:14
    查看更多