我正在尝试用另一个替换一个
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
加载完美。但我担心以前的观点会发生什么?它是停留在记忆中,还是消失了?
如何在不阻止下一个视图出现的情况下将其从内存和网站中删除?
不,据我所知,第二种方法是正确的方法。在第一种方法中,您要求 VC 在出现新的 VC 之前解散。这将是没有视图,这不会发生。 当呈现新的 VC 时,旧的 VC 不会保留在内存中,因为视图的本质是它仅在视图中时才使用内存。我希望这是有道理的。
尝试在解雇方法调用的完成处理程序中呈现新的视图控制器:
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];
}];