如果由于内存警告导致视图控制器被卸载,如何恢复状态?

时间:2012-08-07 08:17:55

标签: ios cocoa-touch uiviewcontroller segue

我有一个视图控制器,它获取由视图控制器设置的属性。

基本上,我有类似

的东西
- (void)doStuff {
    [self performSegueWithIdentifier:@"segueToThing" sender:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([[segue identifier] isEqualToString:@"segueToThing"])
        [(ThingViewController *)[segue destinationViewController] setImportantData:[self importantData]];
}

问题是,如果我按ThingViewController然后在其上推送另一个视图控制器,然后发出内存警告,我的ThingViewController将被卸载以释放内存。然后我弹出第三个视图控制器,我的ThingViewController再次被加载,但我在segue中设置的importantData属性现在是nil,因为segue没有被再次触发。

我该怎么办?我应该将我所有的州存放在哪里......?

2 个答案:

答案 0 :(得分:0)

如果您不想释放该内存,请不要在内存警告或viewDidUnload中释放它。

如果需要释放内存,请保留数据,然后在VC恢复时重新加载。

答案 1 :(得分:-3)

也许将重要数据存储在AppDelegate中?在AppDelegate.h文件中声明一个NSData对象或需要保存的任何对象。然后在prepareForSegue期间,您会得到AppDelegate的引用,如下所示:

AppDelegate *appDel = [[UIApplication sharedApplication] delegate];

然后使用您在AppDelegate中保存的变量保存对象。然后,当再次加载第二个视图时,再次调用AppDelegate并使用App Delegate中的数据。希望这可以帮助。如果您需要更多帮助或者我不清楚,请告诉我。