2

在我的应用程序中,用户可以选择在屏幕上显示任意数量的对象。显示的每一个都必须从文件中取消归档,放入内存,然后显示。通常,如果显示允许的最大对象数,我的应用程序的总内存消耗会上升到大约 15 MB。如果我按下主页按钮并暂停应用程序然后返回应用程序,消耗的内存将下降到大约 6 MB!一切仍然正常;对象仍在内存中。这怎么可能?我正在真实设备上对此进行测试。这是 Instruments 的问题,还是导航控制器在应用程序进入后台时被释放的某种缓存?任何能说明这一点的东西都会受到欢迎。

编辑:

我现在才意识到 Instruments 中两个“分配”工具的区别。当您分析应用程序时,您可以选择“泄漏”或“分配”。通过选择泄漏,我可以看到我的内存占用量的一个度量,峰值约为 20 MB。通过选择分配,我看到了我的内存占用量的另一个衡量标准,它达到了惊人的 230 MB!显然,每个人测量的内容都存在一些差异。我应该看哪个?我一直关注“泄漏”分配测量。


以下是在应用程序中同一时间拍摄的两个最近的个人资料:

通过“泄漏”,我得到了这个结果:

泄漏

使用“分配”我得到了这个结果:

分配

有人可以向我解释这种差异背后的含义吗?

4

1 回答 1

1

据我了解,分配向您显示了总共分配的内存量,但并没有摆脱被释放的位。泄漏向您显示泄漏的内存量,即已分配但未释放的内存量。您必须始终以零为目标。为避免内存泄漏,请在项目中使用 ARC 或确保正确保留释放所有内容。

如果您想测量应用程序消耗的内存量,我会选择 Instruments 中的 Activity Monitor,它应该会显示实际数量。

于 2012-06-27T13:11:07.657 回答