dismissViewControllerAnimated 阻止新的 UIViewController 显示

问题描述 投票:0回答:2

我正在尝试用另一个替换一个

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
加载完美。但我担心以前的观点会发生什么?它是停留在记忆中,还是消失了?

如何在不阻止下一个视图出现的情况下将其从内存和网站中删除?

ios objective-c uiviewcontroller
2个回答
0
投票

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


0
投票

尝试在解雇方法调用的完成处理程序中呈现新的视图控制器:

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];
}];
© www.soinside.com 2019 - 2024. All rights reserved.