间歇性内存泄漏

时间:2010-02-03 09:17:48

标签: iphone memory

我正在测试泄漏的特定用例。有时候,我会得到泄漏,有时我甚至不会通过相同的用例。你能否建议是因为系统框架还是我的代码?

我已经检查了我的代码,并且在没有任何未发布的对象的情况下,外观看起来很完美。你能建议一个解决方案吗?

由于

2 个答案:

答案 0 :(得分:1)

这不太可能成为框架。不要忘记有数百(数千?)的开发人员在那里使用它,所以有人没有注意到那里的错误的机会比仅仅由你自己审查的代码更轻薄。

答案 1 :(得分:0)

间歇性内存泄漏最可能的来源是自动对象。自动释放的对象会一直闲置,直到它们所属的自动释放池耗尽。根据内存条件的不同,它们可能看起来像是在一次运行中泄漏,但是接下来的运行时却没有。

请参阅Avoiding, finding and removing memory leaks in Cocoa以了解如何跟踪内存泄漏。

<强> Edit01:

你可能会侥幸逃脱,但我不推荐它。如果它在Apple测试时泄漏,那么很有可能被拒绝。

作为一个质量问题,它取决于泄漏的严重程度以及在实际使用过程中可以持续多长时间。每个应用程序可能会在这里和那里泄漏几个字节。 (例如,某些框架中存在已知的泄漏。)如果泄漏非常小,它们不会导致问题,尤其是在仅运行很短时间的应用程序上。但是,如果泄漏量较大或应用程序设计为长时间运行,那么泄漏最终会导致应用程序崩溃。

例如,假设您有一个类似天气应用程序的程序。作为一个质量问题,如果因为快速使用天气应用程序而泄露了一点也没关系。人们打开它,看天气然后关闭它。泄漏没有时间积累。另一方面,如果您有一个类似网络浏览器或电子阅读器的应用程序,人们会长时间保持打开状态,那么泄漏可能会累积并导致应用程序崩溃。

简而言之,与所有其他编程任务一样,追踪泄漏是感知质量与发展之间的权衡。花费更多的资源追踪一个微不足道但常见的错误比跟踪一个严重但非常罕见的错误是很常见的。

我要重申,上述泄漏中的内存泄漏检测方法最终会找到漏洞。如果你花时间在它上面,你最终会找到它。