首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动释放池何时耗尽?

自动释放池何时耗尽?
EN

Stack Overflow用户
提问于 2015-05-28 19:13:13
回答 2查看 3.5K关注 0票数 6

我学习手动内存管理,我想知道什么时候自动释放池耗尽。

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

第三种情况是我想要的,这让我很困惑。

正如我所研究的,自动释放对象就像C中的自动变量一样,它们只存在于逻辑范围(函数体)中。因此,我认为在每个函数之后都有一个隐藏的[pool drain];

但是,有人向我指出,这是不正确的,因为我认为。苹果说,在一次“事件”之后,它就会枯竭。例如,当用户命中按钮、表视图重新加载时,可能会发生该事件。

但这些信息还不足以看到整个情况。你能为我澄清一下,什么时候才是像NSArray *arr = [NSArray array];这样的对象的水池排水口?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-28 19:23:04

这些文档并不是关于“主”自动释放池何时耗尽的,但是通常您可以假设它是在应用程序的主事件循环结束时耗尽的。

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

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

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

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

Application在事件循环的每个循环开始时在主线程上创建一个自动释放池,并在事件循环结束时耗尽它,从而释放在处理事件时生成的任何自动释放对象。

票数 9
EN

Stack Overflow用户

发布于 2019-06-20 03:21:02

当我使用反向工程工具分析基金会框架时。然后,我发现在runloop开始时创建了自动释放池,在runloop结束时发现了发布。图片:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30515230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档