iOS:内存警告使按钮消失

时间:2012-08-13 02:34:15

标签: objective-c ios memory warnings memory-leaks

我在iPod touch上运行我的iOS应用程序,我似乎收到了很多内存警告。不知道为什么会这样,我使用了仪器而我没有使用那么多内存。无论如何,有时在接收到内存警告后,工具栏上的某些UIBarButtonItem会消失(例如,导航控制器中的后退按钮)。

这是一个真正的问题,唯一的解决方法就是杀死应用并重启。我该如何处理这种情况?也许有办法重新加载栏按钮项?有没有人遇到类似的东西,你会怎么做?

感谢您的帮助。

编辑:我应该补充一点,我的UIBarButtonItems有自定义图像。我在viewDidLoad中设置了这些图像。也许低内存警告会释放这些图像,然后它们不再被加载。我想可能就是这样,但是我如何确保如果再次出现视图,图像会再次加载?

EDIT2:似乎问题是在viewDidUnload中我将其中一个BarButtonItem设置为nil。我认为当我设置IBOutlet时,它实际上是由XCode自动插入的。这是正确的做法,还是我不应该把它设置为零。如果是这样,我如何在以后适当地重新分配?

2 个答案:

答案 0 :(得分:1)

如果您在本地设置图像并且没有对它们的强引用,那么一旦它们超出范围,操作系统就会将它们视为“一次性”。收到内存警告后,将取消分配。尝试保持对图像的更大范围的引用。

答案 1 :(得分:0)

不要处理症状(UIBarButtons消失),而是尝试查找程序泄漏内存的位置。以下是有关查找内存泄漏的一些提示:

  1. 浏览您的代码并查找malloc所在的所有实例并确保您取消分配
  2. 使用分析器查找内存泄漏,大多数情况下它会命名未正确解除分配的对象。
  3. 在查找泄漏时查看此presentation
  4. 最后,当您确定没有内存泄漏和那些警告,但是您的按钮仍在消失时,请在新问题中发布一些代码。