什么时候自动释放池会流失?

Evg*_*ban 4 memory-management objective-c ios

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

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

第三种情况是我要求的,对我来说有点混乱.

在我研究时,自动释放对象就像C中的自动变量一样,只存在于逻辑范围内(在函数体中).因此,我想在每个函数之后都有一个隐藏的[pool drain];

但是,有人向我指出,我认为这不正确.苹果说,它在"事件"之后消失了.当用户点击按钮时,可能会发生该事件,例如重新加载表视图.

但是这些信息还不足以让人看到整体情况.你能否为我澄清一下,当一个游泳池正好用于物体时NSArray *arr = [NSArray array];

mip*_*adi 5

该文档并未具体说明"主"自动释放池何时耗尽,但通常您可以假设它在应用程序的主事件循环结束时耗尽.

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

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

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

该文档NSAutoreleasePool包含更多信息,包括此相关信息:

Application Kit在事件循环的每个循环开始时在主线程上创建一个自动释放池,并在最后将其排出,从而释放处理事件时生成的任何自动释放的对象.