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

Rob*_*Rob 9 iphone cocoa-touch memory-leaks objective-c

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

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

los*_*sit 5

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

你一般应该照顾的事情

  1. 释放您不需要的任何变量
  2. 始终处理didReceiveMemoryWarning和释放未使用的任何变量
  3. applicationDidReceiveMemoryWarning类似音频/视频播放,UIImagePickerController等中停止任何内存繁重的进程

编辑 这不再适用.imageNamed:在3.x OS版本之前有缓存问题.问题不再存在,你应该使用imageNamed :(使视网膜显示更容易实现)

  1. 不要imageNamed:用来创建UIImage对象.

  • imageNamed:point现在不适用.在3.x之前,imageNamed用于缓存图像,增加应用程序使用的内存.他们现在已经大大改善了它.因此,使用3.x及更高版本,您可以使用此方法. (3认同)

And*_*ant 2

基本上,您收到此警告是因为(毫不奇怪)iPhone 内存严重不足。这通常可能是出于以下两个原因之一:

  1. 你有内存泄漏。
  2. 您分配了太多对象,需要重新审视您的设计。

对于第一个,您应该运行工具并检查内存分配。这确实会减慢您的应用程序速度(并且需要额外的内存),因此请尝试一次测试应用程序的一个区域。例如,如果您有多个视图,请在它们之间切换几次。

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

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

不幸的是,没有真正的方法(据我所知)可以从 iPhone 操作系统获取当前内存分配的数据。这使得隔离应用程序中无意中占用内存的区域变得非常困难。