【发布时间】:2010-10-04 05:08:10
【问题描述】:
背景:
我有一个标签栏应用程序。每个选项卡都包含导航控制器,允许用户从一个视图转换到另一个显示数据的向下钻取信息(每个视图都由视图控制器处理,每个视图控制器类都有didReceiveMemoryWarning 方法)。通过从 Web 服务中提取数据来填充列表。
问题:
当我使用 iPhone 模拟器的“硬件 > 模拟内存警告”选项时,我的所有视图控制器都会调用 didReceiveMemoryWarning 方法——甚至是用户正在查看的那个。我不想清除活动视图控制器正在使用的任何内容。我怎样才能做到这一点?
由于内存警告,数据被释放后,应该有哪个方法实现重新加载数据? (我看到当用户返回该视图时,包含表视图的视图控制器类调用 viewDidLoad 方法,但如果视图包含(比如 UIWebView),则不调用 viewDidLoad 方法。为什么会这样?) /p>
已编辑(2009 年 1 月 30 日星期五 - 下午 3:10)
(注意:我使用Interface builder来创建视图,loadView方法被注释掉了。)
因此,当视图控制器收到内存警告消息时,会执行以下步骤:
-
以下方法被调用:
- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } 由于调用
[super didReceiveMemoryWarning],[self setView:nil]会被自动调用?如果要清除任何资源,则应覆盖
setView方法以清除本地资源。如果视图当前处于活动状态,则不会调用
[self setView:nil](默认情况下)。正确的? - 我真的很好奇哪种方法做出这个决定以及如何做出决定?
请您确认一下。另外,我在遵循这种方法时遇到了一个错误,但是在控制器类的dealloc 方法中释放myObject 后添加myObject = nil 解决了这个问题。谢谢。
【问题讨论】:
标签: iphone memory warnings simulator