iPad 和 iPhone 应用程序中的内存泄漏

Posted

技术标签:

【中文标题】iPad 和 iPhone 应用程序中的内存泄漏【英文标题】:Memory Leak in iPad and iPhone App 【发布时间】:2011-09-12 09:23:39 【问题描述】:

我想问一下,Apple 对 iPad 和 iPhone App 允许多少 MB 的内存泄漏。这样 App 就不会被 App Store 拒绝。 我在 XCode 中使用 Instruments 来检查我的 iPad 应用程序的内存泄漏。它泄漏了大约 11 MB 的内存。但是在 iPad 上安装时,App 并没有被 Springboard 终止,并且可以连续运行,没有任何问题或错误。当对象没有用时我已经释放了内存,但它仍然泄漏。

【问题讨论】:

【参考方案1】:

Apple 没有指定泄漏的限制,但我建议 11MB 是巨大的。我的目标是在我编写的每个应用程序上泄漏 0 个字节。您泄漏这么多的事实意味着您不了解内存管理,因此您应该仔细阅读 Apple 关于该主题的文档:

http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html#//apple_ref/doc/uid/10000011i

或谷歌一些在线教程,初学者可能更容易理解。例如

http://www.raywenderlich.com/2657/memory-management-in-objective-c-tutorial

您的应用程序使用的内存越多,它被杀死的机会就越大,用户体验就越差。您的应用现在可能会持续运行,但会持续多长时间?

【讨论】:

【参考方案2】:

没有指定内存泄漏的容忍度。问题是您自己不应该容忍它,这对应用程序和性能都不利,并且会使应用程序不太稳定。我建议你先解决这些内存泄漏问题,这将使应用程序的质量更好,让你的客户满意。

【讨论】:

【参考方案3】:

我支持这样的概念,即没有针对内存消耗或内存泄漏的硬性指定限制。这也取决于我假设设备在该特定时间的当前内存消耗。

在任何情况下,只要收到内存警告,- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 方法就会被触发,您可能应该听听此方法以尝试释放应用程序上的一些内存。这种预热将被发送几次到应用程序,如果没有做任何事情来释放内存,操作系统将强制退出应用程序(即它会崩溃)。

您还可以尝试 XCode 中的 Build and Analyze 选项来查看代码中的一些潜在内存泄漏。

【讨论】:

我使用了工具(构建和分析)来检查内存泄漏。并且已经在 iPad 上部署了 App,但是如果它连续运行很多天,它无论如何都不会崩溃。感谢您的指导,我将按照上述链接学习内存管理

以上是关于iPad 和 iPhone 应用程序中的内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

iphone/ipad 内存泄漏仪器工具

奇怪的内存泄漏

如何解决 xcode(仪器)中的 iPhone 应用程序内存泄漏

iOS 或 MonoTouch 中的固有内存泄漏?

iPhone SDK 中的 NSMutableArray、NSArray、NSString 内存泄漏

iPhone应用程序中的MKMapView内存泄漏