问题描述
我有一个带有两个视图控制器的情节提要。第一个是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的视图(超级视图)。