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