2008-12-01 62 views
4

我的应用程序在用户处于导航控制器堆栈视图内时收到低内存警告时遇到了问题。在用户浏览了后续UITableView中的一系列分层选项后,他可以在UIWebView(在不同的视图控制器中)中打开PDF文档。如何处理iPhone上的低内存警告?

一切工作正常,PDF加载和用户可翻页。但是,当文档有点大或有几页时,用户点击导航控制器中的“返回”按钮时,导航控制器堆栈中的前一个视图控制器已被释放,导致应用程序崩溃。

在四处搜寻处理低内存警告和处理这类问题的方法之后,我发现了几条建议人们释放可释放对象的帖子,然后稍后将其延迟加载用户尝试加载已被释放的视图。其中一个帖子是Craig Hockenberry的Dealing with memory loss: the cleanup的帖子。

虽然这有点帮助,它并没有给我很多信息工作。

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

回答

5

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

+0

您的意思是任何成员或只有IBOutlets? – Oliver 2012-01-22 13:16:27

2

你的第一个任务是弄清楚什么正好是造成的问题。哪个对象正在被释放?通常,解决这个问题只是为了确保物体保持正确。

我建议你使用NSZombiesEnabled来尝试跟踪你有问题的对象。一旦你有了,你可以确保你保持正确。