iOS - 从模态演示中清除视图控制器堆栈

时间:2015-06-15 04:27:29

标签: swift memory-management viewcontroller

在我的应用程序中,我有一个按钮出现在每个视图控制器上(按钮在所有视图控制器上保持不变)。单击此按钮时,它应该将用户带到初始视图控制器,基本上重新开始。

单击该按钮时,它会很好地进入初始视图控制器,但问题是它将所有先前视图控制器的堆栈保留在内存中。我不是100%肯定,但似乎是这种情况。如果我继续浏览应用程序,然后单击按钮重新启动,每次重复此循环时应用程序都会使用越来越多的内存。

有没有办法从内存中清除视图控制器堆栈?

以下是我如何实现演示文稿的代码(仅包含相关功能)。该按钮作为右侧栏按钮项目包含在导航选项卡中。

class CustomVC: UIViewController {

    override func viewDidLoad() {
        self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Start Over", style: UIBarButtonItemStyle.Plain, target: self, action: "goToInitialVC")
    }

    func goToInitialVC() {
        let initialVC: UIViewController = self.storyboard!.instantiateInitialViewController() as! UIViewController
        self.presentViewController(initialVC, animated: true, completion: nil)
    }

}

1 个答案:

答案 0 :(得分:1)

这是我在iOS应用中的方式。不幸的是,我刚刚意识到你的是Swift,我的是Objective-C。也许它仍然有用。

AppDelegate.m中的

- (void)resetWindowToInitialView
{
    for (UIView* view in self.window.subviews)
    {
        [view removeFromSuperview];
    }

    UIViewController* initialScene = [initalStoryboard instantiateInitialViewController];
    self.window.rootViewController = initialScene;
}

在其他文件中

....
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate resetWindowToInitialView];

[self dismissViewControllerAnimated:YES completion:nil];
....