2011-06-20 59 views
1

我的应用程序中有一个奇怪的错误 - 当应用程序正在运行时,我有时会遇到一种奇怪的行为,应用程序正在“反驳”并回到第一个屏幕(就好像调用了ViewDidLoad一样再次)。它没有明确的逻辑(有时会在应用程序运行几秒后发生,有时我可能会潜伏几个小时而不会发生)。跟踪内存警告源 - iOS

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

  1. 是否有人熟悉这种行为?意思是,应用程序在接收到内存警告时被“反驳”?
  2. 由于我不知道是什么导致了内存问题,有没有人有任何想法我应该如何跟踪它?任何推荐的工具来做到这一点?

任何帮助将非常感激。

+0

使用泄漏工具和分配工具来跟踪内存问题。你可以做的第一件事是建立和分析。这将指出你在代码库中泄漏内存的所有地方。 –

+0

内存警告很容易出现,无需泄漏,因此无论如何都必须正确处理它们。事实上,他们只是预计。 – Eiko

回答

1

使用仪器工具在运行时查找泄漏和物体大小。当我们使用UIImagePickerController来选择图像时,内存警告有时也会出现。也做一个静态分析使用铛静态分析器有一个贵公司的应用程序编写的谷歌你找到应用程序。最后但并非最不重要的一些内存管理指南。

UPDATE

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

下面是一个屏幕截图

enter image description here

有关谷歌的Objective-C内存管理内存管理搜索,你会得到一堆的文章。另请阅读Objective-C 2.0的属性。

+0

感谢Rahul的快速回复;几个问题,如果我可能: 1.我如何到达您提到的仪器工具? 2.您是否有任何内存管理指南的建议?一个刚刚开始的人可读 –

+0

您是否知道仪器工具可能位于XCode4中? –

+0

@Ohad Regev在这里你去http://stackoverflow.com/questions/5304390/instruments-in-xcode-4 –

2

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

+0

嗨荣子,谢谢你的答案。我不确定我想去那里,但我该如何“妥善处理这种情况(即初始化新鲜)”? 你的意思是我应该实现“ApplicationReceivedMemoryWarning”或类似的东西,并做一个有组织的行动,以防万一它发生? –

+0

有回调,特别是在视图控制器类。虽然我不会正式推荐它,但如果不在小内存占用的应用程序中泄漏内存,那么实现它不做任何事情通常都是足够好的解决方案。正确的做法需要考虑更多因素 - 我认为苹果的一些指南会详细介绍。 – Eiko