如何处理iPhone上的低内存警告?

时间:2008-12-01 16:55:49

标签: iphone cocoa-touch memory-management

当用户深入导航控制器堆栈视图时,我的应用程序收到内存不足警告时出现问题。在用户浏览后续UITableViews中的一堆分层选项后,他可以在UIWebView中打开PDF文档(在不同的视图控制器中)。

一切正常,PDF加载,用户可以浏览页面。但是,当文档有点大或有多个页面,并且用户点击导航控制器中的“后退”按钮时,他的应用程序崩溃,因为导航控制器堆栈中的前一个视图控制器已被解除分配。

在寻找处理低内存警告的方法,并处理这类问题之后,我发现了几个帖子,建议人们释放可以释放的对象,然后在以后延迟加载它们用户尝试加载已解除分配的视图。其中一篇文章是Craig Hockenberry的Dealing with memory loss: the cleanup帖子。

虽然这有点帮助,但它并没有给我提供太多信息。

有人可以提供一个关于如何处理低内存警告的简单指南,以及如何实现对象的“延迟加载”?

2 个答案:

答案 0 :(得分:5)

当内存不足时,系统会发出一系列与内存相关的消息。任何实例化的视图控制器都将获得-didReceiveMemoryWarning消息。如果不实现此操作,则默认操作(假设视图控制器不是最前面的)是释放控制器的视图成员。如果您有钩子,或者可能进入其子视图,那么当您的控制器返回到堆栈顶部时,这可能会导致问题。

答案 1 :(得分:2)

您的首要任务是找出完全导致问题的原因。哪个对象被解除分配?通常,修复此问题只是确保正确保留对象。

我建议您使用NSZombiesEnabled尝试跟踪您遇到问题的对象。一旦你有了,你可以确保你正确地保留它。