2012-08-13 84 views
0

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

这是一个真正的问题,唯一的解决办法是杀死应用程序并重新启动。我该如何处理这种情况?也许有一种方法来重新加载栏按钮项目?有没有人遇到类似的事情,你会如何继续?

感谢您的帮助。

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

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

回答

1

如果您在本地设置图像,并且没有强烈的引用,则一旦操作系统超出范围,它们将被视为“一次性”。当接收到内存警告时,它们将被释放。尝试保留更大范围的图像参考。

+0

好的,所以我做了一些更多的测试,看来当我得到内存警告(或者如果我在模拟器中模拟它),那么我的BarButtonItems被设置为零。我如何重新分配他们?我在故事板中创建了它们,所以它们是IBOUtlets(强壮和非原子)。 – user1013725 2012-08-13 02:58:55

+0

只是为了补充一点,我认为这不仅仅是图像被释放,它是整个UIBarButtonItem被释放。 – user1013725 2012-08-13 03:02:59

+1

你应该实现didreceivememorywarning并发布一些你不需要的东西。 – Dustin 2012-08-13 03:17:36

0

而不是治疗症状(UIBarButton消失),试着找出你的程序在哪里泄漏内存。这里是寻找内存泄漏的一些技巧:

  1. 通过你的代码,并找到你的malloc的所有实例,并确保你deallocing
  2. 使用Profiler来查找内存泄漏,大部分时间它会命名没有正确处理的对象。
  3. 检出此presentation查找泄漏。

最后,在确定没有发现内存泄漏和警告,但按钮仍然消失后,在新问题中发布一些代码。

+0

他可能不会泄漏记忆; iPod touch通常具有较低的内存容量。如果应用程序是为更高容量的设备编写的,它可能很容易触发内存警告,而不会泄漏。 – Dustin 2012-08-13 02:45:19

+0

我对iPhone没有任何问题。 iPod touch似乎有更低的内存容量。另外,我正在使用ARC。 – user1013725 2012-08-13 02:57:38

+0

此外,当我通过Facebook登录时,这些内存警告通常会出现,即致电Facebook应用程序进行身份验证。不知道我是否可以改变与此相关的任何事情。 – user1013725 2012-08-13 03:00:42