iPad和内存问题

iPad和内存问题,ipad,memory-leaks,ios,memory-management,ipc,Ipad,Memory Leaks,Ios,Memory Management,Ipc,当iPad应用程序因“内存不足”而被iOS强制关闭/关闭时,应用程序分配的内存是否可能没有100%释放?我认为客户端直接分配的内存已经释放了——甚至硬件也支持这一点,但我们观察到,如果应用程序被iOS关闭/关闭,并因此再次启动,可用内存就会越来越少,直到iPad必须重新启动。我们认为一些内存是由后台运行的守护程序分配的,这些守护程序代表应用程序执行一些工作,如果进程间通信没有成功完成,守护程序端使用的内存可能无法正确释放 这样的事情可能吗? 溴 STeN如果你分配内存,它将留在堆中,直到你释放它

当iPad应用程序因“内存不足”而被iOS强制关闭/关闭时,应用程序分配的内存是否可能没有100%释放?我认为客户端直接分配的内存已经释放了——甚至硬件也支持这一点,但我们观察到,如果应用程序被iOS关闭/关闭,并因此再次启动,可用内存就会越来越少,直到iPad必须重新启动。我们认为一些内存是由后台运行的守护程序分配的,这些守护程序代表应用程序执行一些工作,如果进程间通信没有成功完成,守护程序端使用的内存可能无法正确释放

这样的事情可能吗? 溴
STeN

如果你分配内存,它将留在堆中,直到你释放它,即使分配内存的应用程序早已不存在。正如您所看到的,重新启动设备将清除堆

您应该始终管理内存事件,这有一种方法

- (void)didReceiveMemoryWarning;
通常你会发布所有你能发布的东西,特别是如果是2级,就好像你不知道你的应用程序无论如何都会关闭一样


然而,当你的应用程序退出时,它无论如何都应该调用dealloc!因此,您可能有一般性泄漏。

我相当肯定,该方法:

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

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

嗨,你真的确定如果进程被操作系统杀死或被用户关闭,它在其生存期内分配的内存不会自动释放吗?这听起来很奇怪,我不知道操作系统是这样的……我不是这方面的专家,但即使你在windows中编写C++/C程序,在没有免费软件的情况下执行malloc,这种情况也会发生。高级语言不同,因为它们有很好的垃圾收集,或者在VM中运行应用程序,因此当应用程序关闭时,它可以杀死VM的内存,但是C、Obj-C和C++不是这样的。另外,如果一个对象被分配,那么在发布大麻烦之前设置为零。通常,进程会在其生命周期内分配其拥有的一部分内存。当工艺死亡时,所有泄漏都会释放,因此,如果工艺崩溃,则不可能产生泄漏。当然也有一些例外,比如共享缓冲区,但是应该释放使用malloc或相关函数分配的普通内存。这就是Linux或Symbian等普通操作系统的行为方式。我认为这也适用于iOS,不是吗???如果现代操作系统在那些日子里表现出不同的行为,那将是很奇怪的……动态分配的内存一直存在,直到程序员或垃圾收集器显式释放它。GCC确实支持垃圾收集,尽管我认为它在默认情况下是关闭的。嗨,我相信,一个好的应用程序应该在关闭时释放所有东西,但是当操作系统调用应用程序时,它将终止,并且应用程序在下一步终止,我希望内存是由操作系统本身释放的-至少在Linux上是这样,Symbian,Windows完成。我猜这种方法是为了其他目的,比如关闭文件等。BRNo iOS无法释放内存,除非您专门处理它。如果保留或自动释放,则必须释放所有对象。如果你的应用程序与堆上的对象一起崩溃,它们将一直保留在内存中,直到设备重新启动。嗨,我只想说进程被终止/崩溃的情况,请参阅我上面的评论!!然后,应该释放使用mallocsC/newC++/allocObj-C或相关函数分配的正常内存。希望iOS上也是如此,我几乎可以肯定它确实如此!BR STeNiOS在任何情况下都不会自行释放内存。