在iPhone上调试applicationDidReceiveMemoryWarning的最佳方法?

时间:2009-03-20 16:42:45

标签: iphone objective-c cocoa-touch memory-leaks

需要有关如何调试此内容的建议。我是新手,环境有限,没有以前的嵌入式或智能手机编程经验,所以我可以使用一些线索。 已经意识到: 仪器,Clanger静态分析,手动代码审查等。一般来说,仪器似乎非常有用但非常耗时且冻结了很多时间! Clanger也帮助了我很多。看起来我只是消耗了太多的内存而且我想知道一个好的策略是什么。我是否会发布一些顶级对象?有'首选策略'吗?

只是想知道是否有人成功解决了这个问题,是否有任何其他建议?谢谢大家。

2 个答案:

答案 0 :(得分:5)

在iPhone应用程序中有很多关于内存管理的好文章。这是一些有用的链接。

你应该照顾的事情

  1. 发布您不需要的任何变量
  2. 始终处理didReceiveMemoryWarning并释放所有未使用的变量
  3. 停止applicationDidReceiveMemoryWarning中任何内存繁重的过程,如音频/视频播放,UIImagePickerController等
  4. 修改 这不再适用。 imageNamed:在3.x操作系统版本之前有缓存问题。该问题不再存在,你应该使用imageNamed :(使视网膜显示更容易实现)

    1. 请勿使用imageNamed:创建UIImage对象。

答案 1 :(得分:2)

基本上你会收到这个警告,因为(不出所料)iPhone的内存危险性很低。这通常可能是出于以下两个原因之一;

  1. 您有内存泄漏。
  2. 您分配的对象太多,需要重新审视您的设计。
  3. 对于第一个,你应该运行仪器并检查你的内存分配。这可能会使您的应用程序变慢(并且需要额外的内存),因此请尝试一次测试一个应用区域。例如。如果你有多个视图在它们之间切换几次。

    对于第二个,你将不得不检查你正在做的事情,这可能导致大量的内存分配。例如,如果您正在编写Flickr浏览器,则可能需要在任何时候减少已加载的图像数量,或者在收到此警告时释放一些未使用的图像。

    这些是关于我可以在不了解您的应用程序的情况下建议的唯一一般规则。

    不幸的是,没有真正的方法(我知道)从iPhone OS获取当前内存分配的数据。这使得很难隔离应用程序中无意中耗尽内存的区域。