swift xcode iOS: 我可以重新使用加载的模态全屏视图控制器吗?

swift xcode iOS: can I re-use a loaded modal fullscreen view controller?

我有一个带有两个视图控制器的故事板。第一个 VC_1,有一个按钮可以打开第二个 - VC_2。 VC_2 还有一个按钮可以打开 VC_1。 两个控制器的代码几乎相同:

class VC_1: UIViewController
{ 
   override func viewDidLoad()
    {
        super.viewDidLoad()
        print(“VC_1 loaded")
    }
    
    override func viewDidAppear(_ animated: Bool){  print(“VC_1 appeared")  }
    override func viewDidDisappear(_ animated: Bool){  print(“VC_1 disappeared")  }
    
   
    @IBAction func btnShowVC_2(_ sender: UIButton)
    {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        secondVC = storyboard.instantiateViewController(identifier: “VC_2”)
        secondVC.modalPresentationStyle = .fullScreen
        show(secondVC, sender: self)
    }
}

区别仅在于第二个控制器代码中的“VC_2”而不是“VC_1”。 我在 Apple 文档和 Internet 上的许多其他示例中看到了这个 View Controller 创建代码。 当我按下 VC_1 上的按钮时,我在调试 window 中看到 VC_2 已加载并出现,而 VC_1 消失了。当然,当我按下 VC_2 上的按钮时会发生同样的情况 - 它会消失,并且 VC_1 会再次加载。 我的问题是:

  • viewDidDisappear:视图从windows中移除后调用' 查看层次结构。不,视图控制器对象刚刚离开视图 属性。顺便说一句,视图控制器使用的内存量可以忽略不计。所以不要想太多。如果你想捕捉你的视图控制器对象从内存中释放的时间 put

    deinit { print("vc deallocated") }

  • viewDidUnload,自 iOS 以来已弃用 6,用来做一些最后的清洁工作。

  • 部分正确。请记住,ViewDidload 在视图控制器的生命周期中调用了一次。在 viewdidload 之前调用了一个方法,但这与你的问题无关。

除了“viewdidload之前有一个方法”-> loadView( )是一个由viewController管理的方法。 viewController 在其当前视图为 nil 时调用它。 loadView( ) 基本上获取一个视图(您创建的)并将其设置为 viewController 的视图(超级视图)。