【问题标题】:Tracking Memory Warnings Source - iOS跟踪内存警告源 - iOS
【发布时间】:2011-09-18 13:44:40
【问题描述】:

我的应用程序中有一个奇怪的错误 - 在应用程序运行时,我有时会遇到一个奇怪的行为,即应用程序“反驳”并返回第一个屏幕(好像再次调用 ViewDidLoad)。它没有明确的逻辑(有时它会在应用程序运行几秒钟后发生,有时我可以潜伏数小时但它不会发生)。

我怀疑这个问题与一些内存问题有关 - 当我使用调试器运行应用程序时,我可以在日志中看到我在错误发生之前收到内存警告:收到内存警告。级别=1

  1. 有人熟悉这种行为吗?意思是,应用程序在收到内存警告时被“驳回”?
  2. 由于我不知道导致内存问题的原因,有没有人知道我应该如何跟踪它?有什么推荐的工具吗?

非常感谢任何帮助。

【问题讨论】:

  • 使用泄漏工具和分配工具来跟踪内存问题。您可以做的第一件事是构建和分析。这将指出您在代码库中泄漏内存的所有地方。
  • 内存警告很容易出现而没有任何泄漏,因此无论如何都必须正确处理它们。事实上,它们只是意料之中。

标签: ios memory warnings


【解决方案1】:

使用仪器工具在运行时查找泄漏和对象大小。当我们使用 UIImagePickerController 选择图像时,有时也会出现内存警告。还使用 clang 静态分析器进行静态分析,有一个由 nikita zhuk 编写的 gui 应用程序,在 google 上查找您会找到该应用程序。最后但并非最不重要的一点是阅读一些内存管理指南。

更新

Instrument 内置在 xcode 中。通过从下拉菜单中选择泄漏来运行您的项目。在 google 上搜索如何使用仪器。

这是截图

在谷歌objective-c内存管理上搜索内存管理你会得到一堆文章。另请阅读 Objective-c 2.0 属性。

【讨论】:

  • 感谢 Rahul 的快速回复;几个问题,如果可以的话: 1. 我如何才能使用您提到的 Instruments 工具? 2. 您对内存管理指南有什么建议吗?对于刚入门的人来说是可读的
  • 您知道 Instrument 工具在 XCode4 中的位置吗?
【解决方案2】:

如果出现内存警告,一些屏幕外视图可能会被释放并稍后重新加载。如果您没有正确处理这种情况(即重新初始化),您看到的行为是可能的。模拟器可以向您的应用程序发送内存警告 - 所以我建议您玩一分钟(不同的视图、层次结构等),然后触发警告并看看会发生什么。

【讨论】:

  • 您好 Eiko,感谢您的回答。我不确定我想去那里,但是我该如何“正确处理这种情况(即重新初始化)”?你的意思是我应该实施“ApplicationReceivedMemoryWarning”或类似的东西,并采取有组织的行动以防万一?
  • 有回调,尤其是在视图控制器类中。虽然我不会正式推荐它,但如果您的小内存占用应用程序中没有泄漏内存,那么实现它什么都不做通常是一个足够好的解决方案。正确处理需要更多考虑 - 我认为 Apple 提供了一些详细指南。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
  • 1970-01-01
  • 2012-07-18
  • 2011-09-24
  • 2012-06-20
  • 2021-03-21
相关资源
最近更新 更多