0

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

基本上,我有类似的东西

- (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再次加载,但importantData我在 segue 中设置的属性nil现在是因为 segue 没有再次被触发。

我该怎么办?我是否应该将我所有的状态存储在某个地方......?

4

2 回答 2

0

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

如果您需要释放内存,请将数据持久化,然后在 VC 回来时重新加载。

于 2012-08-07T09:26:21.040 回答
-3

也许将重要数据存储在AppDelegate? 在您的 AppDelegate.h 文件中声明一个NSData对象或需要保存的任何对象。然后在prepareForSegue你得到这样的参考AppDelegate

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

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

于 2012-08-07T08:35:53.557 回答