0

我正在尝试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加载非常好。但是我担心以前的观点会发生什么?它卡在内存中了吗?还是消失了?

我的问题是如何在不阻止下一个视图出现的情况下将其从内存和站点中删除。

任何帮助将不胜感激。

4

2 回答 2

0

Try presenting the new view controller in the completion handler of the dismiss method call:

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];
}];
于 2013-10-11T23:11:59.977 回答
0

不,就我所见,第二种方法是正确的方法。在第一种方法中,您要求 VC 在新的 VC 出现之前解散。这将是没有视图,这不会发生。Bu呈现一个新的VC,旧的VC不会保留在内存中,因为视图的本质是它只在视图中使用内存。我希望这是有道理的。

于 2013-10-11T23:07:29.007 回答