1

我有某种情况我想解决:

我有一个UIViewController负载。在某种情况下,我选择UIViewController在导航堆栈中显示一个新的。之后,我想将前一个留UIViewController在堆栈中,但我想对其进行排序release,所以当顶部 VC 弹出到第一个时,我会发现它不是我离开它的状态,而是好像它只是推。

尽管如此,我知道我可能只想将它推送到第二个 VC 之上,但这会在导航堆栈中造成混乱,并且可能会造成内存泄漏,因为这种行为可能会循环。

我正在使用 ARC 并为 iOS 6 及更高版本构建应用程序。

4

2 回答 2

1

我认为你有两个选择:

  1. viewWillAppear如果第二个视图控制器从导航堆栈中弹出,则在第一个视图控制器中调用,因此您可以在该方法中重置第一个视图控制器的所有状态和 UI 元素。
  2. 在弹出第二个视图控制器之前,您可以使用导航堆栈中的新实例替换setViewControllers:animated:第一个视图控制器实例的方法。UINavigationController

因此,这取决于您是要保留第一个视图控制器实例并只是“重置”它,还是在从第二个视图控制器返回时是否想要第一个视图控制器的“新”实例。

于 2013-08-11T12:56:28.750 回答
0

我可以建议您将通知从 2nd VC 发送到 1st VC,并告诉它卸载视图然后手动加载它:

第二个VC:

- (void)viewWillAppear{
   [[NSNotificationCenter defaultCenter]
   postNotificationName:@"unloadVC" object:nil];
}

第一个风险投资

- (void)viewDidLoad{
  [[NSNotificationCenter defaultCenter]addObserver:self 
                                          selector:@selector(unloadVC:) 
                                              name:@"unloadVC" 
                                            object:nil];
}

- (IBAction)unloadVC:(id)sender{
self.view = nil;

[self viewDidLoad];
}

虽然代码没有经过测试。

于 2013-08-11T12:55:47.627 回答