iOS中是否接受任何内存泄漏?

时间:2011-02-18 21:36:35

标签: ios memory-management memory-leaks objective-c-2.0

我是Objective-C的新手(来自Java),我认为我对内存管理有了很好的理解。 但是当我的应用程序加载时,我得到一个非常小的内存泄漏,这只会在游戏加载时发生(我们说的是32到512字节左右)。

当它泄漏时它是随机的,并且它似乎不是触发泄漏的用户。 通常在约20秒至1分钟后检测到。

我从调试器获得的信息永远不会相同。有时它的UIApplication是“负责任的框架”,有时它是[UIWindow makeKeyAndVisible],有时它是[UNibDecoder]。

这是否属于“接受”限制,或应用程序是否应该全部泄漏? 这是我的第一个“大”应用程序。我做了一个小型的flipsideview应用程序,那里没有任何泄漏......

另一方面,识别泄漏的最佳方法是什么?

2 个答案:

答案 0 :(得分:10)

这不是很好,但它不会让你的应用程序被拒绝,除非它导致审阅者面前崩溃。尺寸不如它发生的频率重要。如果它只在每次运行应用程序时出现一次,那不是什么大问题。如果每次用户做某事时都会发生这种情况,那么这就更有问题了。

LLVM的静态分析器可以为您找到一些问题。清理您的版本,然后从Build and Analyze菜单中选择Build。仪器中还有一个泄漏模板。

跟踪这些错误并修复它们可能是一个好主意,因为与Java相比,Objective C内存管理是完全不同的,并且在您尝试调试之前尝试使用较小的东西是很好的截止日期迫在眉睫的一个巨大问题。

答案 1 :(得分:4)

过多的总内存使用量会导致您的应用崩溃和/或被拒绝。如果你在循环或重复方法中泄漏内存,泄漏最终会加起来,你的应用程序将崩溃。

但是如果有泄漏,但不是循环或重复过程,并且总量小于应用程序的典型内存使用量,那么它可能是不礼貌和不优雅的,但是真的没有办法告诉,运营方面的缺点很少。

我常常通过在应用启动期间故意“泄漏”几兆字节来强调测试我的应用,并确保应用仍然正常运行。其中一些应用程序已经被批准用于App Store分发,这个泄漏的测试代码仍然意外地被启用(mia culpa!)。但这表明即使是几MB的泄漏也不是应用程序批准的问题(除非这足以让您的应用程序在低内存测试期间崩溃)。