在ViewControllers

时间:2017-10-09 21:57:58

标签: ios swift

我有2个VC,LoadViewController和HomeViewController。这是在我的LoadViewController中:

class LoadViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        print("init")
    }
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
        let nextViewController = storyBoard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
        self.present(nextViewController, animated: false)
    }
    deinit {
        print("deinit")
    }
}

我的HomeViewController中没有代码。我从来没有看过打印“deinit”,我很好奇为什么控制器不会从内存中删除。我只是想显示一个新的viewcontroller,并删除'old'viewcontroller。

3 个答案:

答案 0 :(得分:2)

调用viewcontroller中的present将不会取消当前视图控制器,因为当前视图控制器只是成为“呈现”视图控制器。要切换视图控制器,请在您的应用代理中添加以下内容:

func presentHome() {
    let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
    let nextViewController = storyBoard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
    self.window?.rootViewController = nextViewController
    self.window?.makeKeyAndVisible()
}

func presentLoad() {
    let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
    let nextViewController = storyBoard.instantiateViewController(withIdentifier: "LoadViewController") as! LoadViewController
    self.window?.rootViewController = nextViewController
    self.window?.makeKeyAndVisible()
}

您可以在应用中的任意位置拨打(UIApplication.shared.delegate as! AppDelegate).presentHome()来展示您的家庭视图控制器。

答案 1 :(得分:1)

您正在使用LoadViewController以模式方式显示HomeViewController。两个视图控制器都将保留在内存中,因为LoadViewControllerHomeViewController的呈现视图控制器。

换句话说,您要在"之上添加新的视图控制器"现有的。

答案 2 :(得分:1)

当您呈现另一个控制器时,HomeViewController将不会调用其deinit,因为如果您dismiss您呈现的另一个控制器并返回此视图控制器,它将保留在内存中。但是,如果您想知道其视图何时消失,则可以实现viewDidDisappear