iPhone内存泄漏问题

5
如果一个应用程序产生很多内存泄漏,它们只是应用程序内的问题还是在应用程序终止后也存在于RAM中?那么iPhone操作系统是否释放了为沙盒应用程序分配的内存?
谢谢。

有关紧密相关的编程内容,请将以下文本从英语翻译成中文。仅返回已翻译的文本:这重要吗?只需确保在您的应用程序中使用适当的内存管理即可。 - EBGreen
1
请注意,一些苹果对象存在内存泄漏问题,例如UIWebview。 - Rodrigo
3个回答

16

内存泄漏是由操作系统为您的程序分配并在其运行时使用的一些内存块,但在程序完成使用后未正确返回以供其他用途使用。所以这些内存被“丢失”了。您的程序没有使用它,但系统还不知道它可以被释放以供其他用途使用。

当您的应用程序运行结束时,由操作系统分配给它的所有内存将被释放以供重新使用。这回答了你的问题。

然而,内存泄漏是一个重大的缺陷。在像 iPhone 这样的低内存设备上,您消耗的内存越少越好,您不希望在运行时泄漏内存。如果设备的内存不足,您的应用程序可能会意外终止或崩溃。


这是一个通常正确的内存泄漏通用答案,但它是否特别适用于iPhone? - EBGreen
是的,据我所知,iPhone 内存管理与 OS X 上的 Cocoa 应用程序相同,不支持垃圾回收。 - cms
我知道iPhone OS没有垃圾回收机制,只是不确定你是从个人经验还是一般经验来说的。我认为你是正确的,只是想要明确一下。 - EBGreen
1
在iOS设备上,内存不是共享的,当一个进程被杀死时,任何内存泄漏都将被消除。 - Otium
1
当然,应用程序可能会创建许多不必要的文件,这些文件将持久存在(并占用“磁盘”空间),直到iOS决定压制它们(根据“存储使用指南”或其他内容)。但这与程序内存不同。 - Hot Licks

1

内存泄漏会在你分配任何对象并在运行应用程序时错过释放这些对象时发生,因此在Xcode中进行分析将有助于检查内存泄漏,并且在Xcode中运行配置模式将有助于检查应用程序中可能存在的泄漏。

并使用NSAutoReleasePool来释放自动释放对象,这些对象在仅分配对象而不分配时将被创建。

希望它有所帮助。


1

内存泄漏是应用程序中的问题,但可能会对总可用RAM产生副作用。

它们是被标记为正在使用但实际上不再使用的内存块。因此,它们对应用程序而言是丢失的。如果您有泄漏,这将增加内存消耗。系统会注意到不良的内存使用情况,并且看门狗(jetsam)可能会强制关闭应用程序。

因此,请尽量减少内存泄漏;-)

它对整个操作系统有影响,但后果微乎其微。因为当您点击Home按钮时,您的应用程序并没有被杀死,而是“后台运行”,您的应用程序所使用的所有内存仍然处于活动状态,无法提供给系统使用。Jetsam会首先告诉您内存不足,并要求您清除不需要的内容。当然,您无法释放泄漏的内存。

如果您仍然为系统使用过多的内存,并且它需要为另一个进程分配更多的内存,则您的应用程序将被终止。它所使用的所有内存都将被释放,包括泄漏的内存。

泄漏是不好的,请在Build and analyze中使用静态CLang分析器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接