iOS是否检索泄漏内存?

iOS是否检索泄漏内存?,ios,memory,memory-leaks,reboot,Ios,Memory,Memory Leaks,Reboot,假设我的应用程序在每次ViewDidLoad而不是release时都会分配内存。我的应用程序做了一些导致内存碎片的工作 iOS是否检索到泄漏内存,或者泄漏内存在下次重新启动之前未被触及 iOS是否修复了碎片化内存,或者在下次重新启动之前内存是碎片化的 我想知道的是,iOS是否能够处理内存泄漏和碎片,从而使其他应用程序能够顺利运行 对于其他移动操作系统(Android、Windows Phone、BlackBerry),这种行为也会发生吗 从我读到的 这似乎是真的。但由于许多人的说法正好相反,这让

假设我的应用程序在每次ViewDidLoad而不是release时都会分配内存。我的应用程序做了一些导致内存碎片的工作

iOS是否检索到泄漏内存,或者泄漏内存在下次重新启动之前未被触及

iOS是否修复了碎片化内存,或者在下次重新启动之前内存是碎片化的

我想知道的是,iOS是否能够处理内存泄漏和碎片,从而使其他应用程序能够顺利运行

对于其他移动操作系统(Android、Windows Phone、BlackBerry),这种行为也会发生吗

从我读到的


这似乎是真的。但由于许多人的说法正好相反,这让我感到困惑

当进程终止时,进程中的所有内存都将返回操作系统。我不确定你所说的内存碎片是什么意思,但所有的内存都将被返回,操作系统将继续将其分发给其他进程。内存的状态是不相关的(如果需要,程序员有责任正确地将分配归零)

Windows Phone和Android是垃圾收集的,所以内存泄漏在很大程度上是无关的。我不了解黑莓。

在iOS和Android(不了解Windows Phone)中,您的应用程序可以使用有限的内存,这些内存分配给设备上运行的每个应用程序

在iOS上,如果一个应用程序尝试使用比操作系统分配的内存更多的内存,它将收到一个内存警告,我认为这个内存警告有三个级别,这样应用程序就可以在不强制关闭的情况下释放内存。如果前两个级别的内存未释放,则在下一个内存警告中,应用程序将强制关闭并释放内存。此外,操作系统将尝试从低优先级的应用程序(后台应用程序)中释放内存

因此,在iOS中,如果您不释放应用程序使用的内存,操作系统将以强制关闭的价格为您释放内存

在Andorid上,情况有点不同,我不同意Borrden的观点,Android使用垃圾收集,但内存泄漏仍然存在,不像在iOS上那样常见,但是出现了错误,而且更难找到和修复

因此,在Android上,每个应用程序都分配了一个具有初始大小的堆,该大小可以增加到某一点,如果堆试图将堆增加到堆的系统限制以上,应用程序将收到著名的
OutOfMemoryError
,而之前没有任何警告,应用程序将强制关闭并释放内存

安道尔的另一个讨厌的事情是,几乎每个版本的Android都有不同的最大堆大小。因此,在某些设备上,应用程序可能会因OOM而崩溃,而在另一个不同Android版本的设备上,应用程序可能会正常运行。在Android上,最后一件讨厌的事情是,只有在最新版本的Android上,当内存被释放时,堆大小才会减小,这可能会导致OOM,因为系统会在堆被完全使用之前增加堆大小(具有讽刺意味的是防止OOM),并且因为堆大小没有减小,所以会超过最大堆大小

另外,Android还有一个方法
onLowMemory
,当整个系统没有足够的内存时调用该方法,但调用该方法是非常困难的


总之,android和iOS都将释放内存,以备操作系统需要,但这可以强制关闭你的应用程序。你应该考虑内存使用的最佳实践,不要让操作系统自己释放内存,只要创建你的应用程序,它将使用尽可能少的资源,应用程序应该释放所有未使用的内存。

你能提供一个具体的安卓内存泄漏示例(除了使用NDK之外)?此外,从iOS 6开始,iOS中的三级内存警告系统已被删除。这是混乱的,现在你只得到一个内存警告。如果在此之后您没有足够快地释放内存,则您的应用程序将终止。android pre 3.0上最常见的“泄漏”是在从屏幕上删除位图时出现的,系统未正确释放他们使用的内存,因此需要对每个位图进行“清除”调用。无论如何,当应用程序上下文作为参数传递给其他类的其他实例并分配给类成员时,任何android版本上最常见的内存泄漏都会出现。在关闭应用程序之前,应用程序上下文不会从内存中删除,因此基本上,接收到应用程序上下文的类将永远不会被释放(除非该成员无效。
All memory you allocate during execution of your app is freed by the system when your app shuts down. This includes any leaks you introduce