dismissViewControllerAnimated阻止显示新的UIViewController

时间:2013-10-11 22:55:29

标签: ios objective-c uiviewcontroller

我正在尝试将一个UIViewController替换为另一个,但我遇到了一个问题。

如果我写这个

[self dismissViewControllerAnimated:NO completion:nil];
//load currentProjectListViewController
currentProjectListViewController = [[CurrentProjectListViewController alloc] initWithNibName:@"CurrentProjectListViewController" bundle:nil];
[self presentViewController:currentProjectListViewController animated:NO completion:nil];

这几乎可以工作,但是视图只是闪烁而没有任何反应..没有加载新视图或任何东西,我在currentProjectListViewController内放置了一个断点,并且线程永远不会在那里。

但是,如果我这样做。

//load currentProjectListViewController
currentProjectListViewController = [[CurrentProjectListViewController alloc] initWithNibName:@"CurrentProjectListViewController" bundle:nil];

[self presentViewController:currentProjectListViewController animated:NO completion:nil];

currentProjectListViewController加载非常好。但我担心什么是以前的观点?它被困在记忆中吗?还是它消失了?

我的问题是如何在不停止显示下一个视图的情况下将其从内存和网站中删除。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

不,第二种方式就是我所看到的正确方法。在第一种方法中,您要求VC在呈现新VC之前解除。这将是没有观点,这是不会发生的。 由于视图的本质是它只在视图中使用内存,因此在呈现新VC时,旧VC不会保留在内存中。我希望这个有意义。

答案 1 :(得分:0)

尝试在dismiss方法调用的完成处理程序中显示新的视图控制器:

typeof(self) __weak weakSelf = self; //Need to have a weak reference to self to prevent retain cycle.
[self dismissViewControllerAnimated:NO completion:^{
    currentProjectListViewController = [[CurrentProjectListViewController alloc] initWithNibName:@"CurrentProjectListViewController" bundle:nil];
    [weakSelf presentViewController:currentProjectListViewController animated:NO completion:nil];
}];