我学习手动内存管理,我想知道什么时候自动释放池耗尽。
有三种情况,我发现:1-在main.m中,从应用程序运行开始,最后耗尽,从而释放内存中的所有对象。2-当您显式创建自动释放池时,手动并将其耗尽。
第三种情况是我想要的,这让我很困惑。
正如我所研究的,自动释放对象就像C中的自动变量一样,它们只存在于逻辑范围(函数体)中。因此,我认为在每个函数之后都有一个隐藏的[pool drain];
但是,有人向我指出,这是不正确的,因为我认为。苹果说,在一次“事件”之后,它就会枯竭。例如,当用户命中按钮、表视图重新加载时,可能会发生该事件。
但这些信息还不足以看到整个情况。你能为我澄清一下,什么时候才是像NSArray *arr = [NSArray array];这样的对象的水池排水口?
发布于 2015-05-28 19:23:04
这些文档并不是关于“主”自动释放池何时耗尽的,但是通常您可以假设它是在应用程序的主事件循环结束时耗尽的。
下面是关于自动释放池的情况:
autorelease被发送到一个对象时,它被添加到堆栈顶部的自动释放池中。release被发送到自动释放池时,它反过来将release发送到池中的任何对象。#4通常在主事件循环结束时自动发生(对于主自动释放池)。
NSAutoreleasePool的文档有更多信息,包括以下相关提示:
Application在事件循环的每个循环开始时在主线程上创建一个自动释放池,并在事件循环结束时耗尽它,从而释放在处理事件时生成的任何自动释放对象。
发布于 2019-06-20 03:21:02
当我使用反向工程工具分析基金会框架时。然后,我发现在runloop开始时创建了自动释放池,在runloop结束时发现了发布。图片:

https://stackoverflow.com/questions/30515230
复制相似问题