当应用程序终止时,系统是否释放我的对象?
我总是怀疑有时候,当我运行我的应用程序的应用程序池被创build,我的应用程序被加载的应用程序池内,当我点击主页button我的应用程序被终止,即我的应用程序所在的池将终止,所以在这如果我不发布这样的对象,我认为它们也会被终止,但是这种方法不被苹果公司推荐,知道是什么原因。 有谁能为我这个问题提供一个可靠的答案吗?
感谢和问候
无论何时应用程序终止,它分配的内存都会返回给系统。 在这种情况下,自动释放池不起任何作用,如果这就是“应用程序池”的意思。 那时仍然在内存中的对象将不会被释放(在系统调用dealloc
的意义上),相应的内存将被简单地标记为空闲。
每个应用程序都有自己的虚拟内存地址空间,就像您对任何“真实”计算机所期望的一样。 当应用程序终止时,其整个虚拟内存将消失,物理内存将被操作系统回收。
所以在技术上,当你的应用程序终止时,不需要释放你当前已经分配的任何对象,但是如果你正确地pipe理你的内存,你会发现实际上很难释放你的对象。
AFAIK术语“应用程序池”在iOS中没有任何意义。
Autoreleasepools在应用程序的运行时(在任何情况下在runloop的beginnig和end)期间被多次创build和销毁。
当您的应用程序被主页button终止时,您的应用程序使用的所有内存将以任何其他应用程序的forms发布和使用,这与您希望在家用计算机上使用的方式相同。
苹果公司的文件明确表示(在OSX相同),退出os简单回收ram。 而在最新的操作系统中,“applicationWillTerminate”行为也同样受到影响。 逻辑是没有用的释放垂死的应用程序的一部分。
(另请参阅OSX的Snow Leopard新的“突然终止”机制是否存在缺陷 )
另一个问题是,如果您在退出时需要特殊的行为: – 保存首选项 – 发送“再见”到服务器…等等。
这两种情况在我看来都是错误的: – 每当苹果build议用户设置时,您必须保存首选项 – 服务器应该有一个超时。
同样的逻辑将涵盖案件的应用程序崩溃。