我研究手动内存管理,不知道自动释放池何时耗尽。
我发现了3种情况:
1-在main.m
中,从应用程序运行开始并最终耗尽,因此释放了内存中的所有对象。
2-当您手动明确创建自动释放池并将其耗尽时
第三种情况是我要的,这让我感到困惑。
正如我研究的那样,自动释放对象就像C中的自动变量一样,仅存在于逻辑范围内(在函数体内)。因此,我想在每个函数之后都有一个隐藏的[pool drain];
但是,有人向我指出,这不符合我的想法。苹果公司说,“事件”发生后,它就会流失。例如,当用户单击按钮,重新加载表 View 时,可能会发生该事件。
但是,这些信息不足以查看整个图片。您能为我澄清一下,什么时候池中的对象(例如NSArray *arr = [NSArray array];
)完全流失了?
最佳答案
该文档没有具体说明何时“主”自动释放池耗尽,但是通常您可以假定它在应用程序的主事件循环结束时被耗尽。
关于自动释放池,将发生以下情况:
autorelease
发送到对象时,它会添加到堆栈顶部的自动释放池中。 release
发送到自动释放池时,它又将release
发送到池中的任何对象。 #4通常在主事件循环结束时自动发生(对于主自动释放池)。
NSAutoreleasePool
的文档提供了更多信息,包括以下相关提示: