当应用程序终止时,系统是否释放我的对象?

时间:2011-05-04 15:32:37

标签: iphone objective-c ios memory-management

我总是怀疑,当我运行我的应用程序时,会创建一个应用程序池并且我的应用程序会在应用程序池中加载,当我点击主页按钮时,我的应用程序终止,即我的应用程序所在的池将被终止所以在这种情况下,如果我不释放这些对象会发生什么,我认为它们也将被终止,但这种方法不被苹果神推荐,知道是什么原因。任何绅士都可以为这个问题提供一个可靠的答案,因为这些日子我已经给我带来了太多麻烦......

谢谢&此致

4 个答案:

答案 0 :(得分:7)

每当您的应用程序终止时,它已分配的内存将返回给系统。如果这就是“应用程序池”的意思,自动释放池在这种情况下不起任何作用。当时仍在内存中的对象将不会被释放(在系统为您调用dealloc的意义上),相应的内存将被标记为空闲。

答案 1 :(得分:1)

每个应用程序都有自己的虚拟内存地址空间,与您对任何“真实”计算机的预期方式大致相同。当应用程序终止时,其整个虚拟内存将消失,操作系统将回收物理内存。

从技术上讲,当您的应用程序终止时,不需要释放您当前分配的任何对象,但如果您正确管理内存,您会发现实际上很难释放您的对象。

AFAIK术语“应用程序池”在iOS中没有任何意义。

答案 2 :(得分:0)

在应用程序运行期间(在任何情况下,在startnig和runloop结束时)都会多次创建和销毁Autoreleasepool。

当您的应用程序被主页按钮终止时,您的应用程序使用的所有内存都将被释放,并且可以被任何其他应用程序使用,就像您希望在家用计算机上工作一样。

答案 3 :(得分:0)

Apple docs明确表示(在OSX中相同)在退出o.s.简单地收回ram。 在最新的操作系统中,“applicationWillTerminate”行为也会受到类似的影响。 逻辑是释放死亡应用程序的一部分没用。

(另请参阅Are there drawbacks to Snow Leopard's new "sudden termination" mechanism? for OSX)

另一个问题是,如果您在退出时需要特殊行为: - 节省prefs - 向服务器发送“再见”等等。

我认为这两种情况都是错误的: - 每当苹果建议用户设置时,你必须保存prefs, - 服务器应该有时间。

相同的逻辑将涵盖案例应用程序崩溃。