2010-10-18 56 views
1

是否有可能,当iPad应用程序被iOS强行关闭/杀死,因为'内存不足'情况,应用程序分配的内存不是100%释放?我认为客户端直接分配的内存被释放 - 甚至有硬件支持,但我们注意到,如果应用程序被iOS关闭/终止,并且因此再次启动的内存越来越少,直到iPad必须重新启动。我们认为有些内存是分配的,例如通过后台运行的守护进程,它代表应用程序做一些工作,如果进程间通信没有成功完成,守护端使用的内存可能无法正常释放...iPad和内存问题

是这样的可能吗? BR STeN

回答

0

如果你分配内存,它会一直留在堆中,直到你释放它,即使这个分配的应用程序已经过去了。就像你看到重启设备将清除堆。

你应该总是管理内存事件,这里有一个方法。

- (void)didReceiveMemoryWarning; 

通常你会释放一切你可以,尤其是如果它的2级,因为如果你不知道你的应用程序会关闭呢。

但是,当你的应用退出时,它应该调用dealloc!所以你可能有一个普遍的泄漏。

+0

嗨,你真的确定这样一个事实,即如果进程被操作系统杀死或被用户关闭,它在生命周期中分配的内存不会自动释放?这听起来很奇怪,我不知道操作系统,这是这样的... – STeN 2010-10-19 08:47:30

+0

我不是一个大师,但即使你在Windows中编写一个C++/c程序,并没有一个免费的malloc,这也发生了。高级语言不同,因为它们具有良好的垃圾回收,或者在VM中运行应用程序,因此当应用程序关闭时可以杀死VM的内存,但C,obj-c和C++不是这样。 – 2010-10-19 09:08:56

+0

此外,如果一个对象已被分配,然后设置为零释放之前,你在大麻烦。 – 2010-10-19 12:08:19

0

我相当肯定,该方法:

- (void)applicationWillTerminate:(UIApplication *)application; 

将运行,即使应用程序崩溃。如果没有被记忆警告所捕获,这将是确保所有内容都被释放的好时机。

+0

嗨,我确信,一个好的应用程序应该在关闭时释放所有的东西,但是当操作系统调用applicationWillTerminate并且应用程序在下一步中终止时,我希望操作系统本身释放内存 - 至少在Linux上,Symbian,Windows完成。我猜这种方法是为了其他目的,比如关闭文件等。BR – STeN 2010-10-19 08:49:02

+0

没有iOS没有办法释放内存,除非你专门处理它。如果保留或自动释放,则必须释放所有对象。如果您的应用程序与堆中的对象崩溃,则它们将保留在内存中,直到设备重新启动。 – Kyle 2010-10-19 13:44:21

+0

嗨,我只是谈论过程中死亡/坠毁的情况(参见上面的评论)!然后释放用malloc(C)/ new(C++)/ alloc(Obj-C)或相关函数分配的正常内存。希望在iOS上也一样,我几乎可以肯定它的确如此! BR STeN – STeN 2010-10-20 09:12:35