2009-08-05 142 views
0

我有一个具有tabBar控制器和navBar控制器的应用程序。它有〜8个视图(各种网站,表格,标准,邮件,地址等),一些使用IB创建的一些使用XCode创建表格视图。我运行了内存泄漏测试程序,它没有内存泄漏。它可以随时在任何视图中崩溃,如果我在视图之间来回切换并使用一些关闭应用程序的功能。多视图应用程序崩溃

我要认为我正确运行1)内存或2)没有释放的观点,这将导致该应用关闭。该应用程序很简单,所以我不知道如何可能是内存不足,我已经审查了代码,以尽我所能地正确释放对象。

所以这是我的问题清单:

1)什么和如何使用其他一些调试工具(或告诉我,我应该找什么样的工具/文件使用)?我想把问题的范围缩小到源头。

2)什么是释放这些观点的最佳做法?怎么样?

3)普通应用使用多少内存?有我应该呆在附近的号码吗?我如何在模拟器中验证?分配工具?

随意点我对苹果的文档或其他计算器的问题,可以帮助我。

更新:它似乎只是崩溃一个视图使用,其中有一个表格视图与自定义单元格...该单元格从plist文件填充...这个视图前几天工作正常,我注意到某些单元格没有来自plist文件的数据......它可能是没有存储正确数据的plist文件问题。我会继续努力。

更新#2:我回到较旧版本的文件,当这个特定的tableView工作得很好(3.0之前),并猜测它的工作原理很好,我将该模拟器更改为3.0版本并在这个tableView上显示出来。感谢迄今为止的帮助,我会尝试下面提到的一些事情,并让你知道我找到了什么。如果你有一些关于为什么从2.2.1到3.0的tableView自定义单元会崩溃的提示,我会带它们。如果我无法得到任何地方,我会很快发布代码。顺便说一句,我上面说错了,我认为它没有在模拟器中崩溃......我错了。

解决方案:感谢故障排除提示修复是相当简单,但很奇怪它没有崩溃2.2.1 ...它应该已经坠毁在很久以前的问题,我被释放的对象一个在我的自定义单元中多次......呃。

回答

0

在第一代和第二代手机的你真的不希望被去了约20兆的实际内存使用率的 - 一旦你得到了,你是在用跳板被杀害的危险。

我见过的一个大罪魁祸首是自动释放内存,因为autorelease池可以比内存长得多 - 如果你使用了很多可能成为潜在问题的自动释放对象。您可以通过在可能的情况下执行更明确的保留/释放以及通过手动创建本地自动释放池并在使用大量自动释放对象执行更深入的操作后释放它们来改善此问题。

跟踪的实际内存使用率的我发现迄今是一个测试手机上运行的调试版本,并与活动监控运行的最有效方法。这会让你清楚地知道你的应用占用了多少内存。以及当它在你身上崩溃时使用了多少。

您可以在运行菜单 - >开始使用性能工具 - >活动监视器中使用Xcode中的活动监视器运行。

另一个非常有用的工具是CLang静态分析器,您可以针对您的代码库运行它,并且可以提供一些非常有用的内存管理信息。如提到here

0

我想尝试的一件事是将一些调试消息放入您的didReceiveMemoryWarning方法中。这样,如果你内存不足,你至少会有一些警告。