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

问题描述

我有一个带有两个视图控制器的情节提要。第一个是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上的按钮时,在调试窗口中看到VC_2已加载并出现,并且VC_1消失了。当然,当我按下VC_2上的按钮时,也会发生同样的事情-它消失了,并且再次加载了VC_1。 我的问题是:

  • 调用“ viewDiddisappear”后,View Controller对象将如何处理?它是否真的从内存中消失了,或者“消失”仅表示“您无法在屏幕上看到它”?我没有在文档中看到“ viewDidUnload” ...
  • 我想“ viewDidLoad”意味着在内存中创建了新的View Controller对象。有什么方法可以只加载一次View Controller对象,然后隐藏并显示它而不会导致调用“ viewDidLoad”吗?我尝试使用全局变量“ secondVC”来执行此操作,但收到“应用程序试图以模态形式显示活动控制器”错误

解决方法

  • viewDidDisappear:在从窗口中删除视图后调用 视图层次结构。不,View控制器对象刚刚离开view属性。顺便说一下,视图控制器使用的内存量可以忽略不计。所以不要想太多。如果您想捕捉您的View控制器对象从内存中释放的时间

    deinit { print("vc deallocated") }

  • viewDidUnload,自iOS以来不推荐使用 6,用来做最后的清洁。

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

,

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