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”后,View Controller 对象会发生什么情况?它真的从记忆中消失了吗,或者“消失”仅仅意味着“你在屏幕上看不到它?”。我在文档中没有看到“viewDidUnload”...
- 我想“viewDidLoad”意味着在内存中创建了新的 View Controller 对象。有什么方法可以只加载一次 View Controller 对象,然后隐藏和显示它而不会导致调用“viewDidLoad”?我尝试使用全局变量“secondVC”来执行此操作,但出现“应用程序试图以模态方式呈现活动控制器”错误。
viewDidDisappear:视图从windows中移除后调用'
查看层次结构。不,视图控制器对象刚刚离开视图 属性。顺便说一句,视图控制器使用的内存量可以忽略不计。所以不要想太多。如果你想捕捉你的视图控制器对象从内存中释放的时间 put
deinit { print("vc deallocated") }
viewDidUnload,自 iOS 以来已弃用
6,用来做一些最后的清洁工作。
部分正确。请记住,ViewDidload 在视图控制器的生命周期中调用了一次。在 viewdidload 之前调用了一个方法,但这与你的问题无关。
除了“viewdidload之前有一个方法”-> loadView( )
是一个由viewController管理的方法。 viewController 在其当前视图为 nil 时调用它。 loadView( ) 基本上获取一个视图(您创建的)并将其设置为 viewController 的视图(超级视图)。
我有一个带有两个视图控制器的故事板。第一个 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”后,View Controller 对象会发生什么情况?它真的从记忆中消失了吗,或者“消失”仅仅意味着“你在屏幕上看不到它?”。我在文档中没有看到“viewDidUnload”...
- 我想“viewDidLoad”意味着在内存中创建了新的 View Controller 对象。有什么方法可以只加载一次 View Controller 对象,然后隐藏和显示它而不会导致调用“viewDidLoad”?我尝试使用全局变量“secondVC”来执行此操作,但出现“应用程序试图以模态方式呈现活动控制器”错误。
viewDidDisappear:视图从windows中移除后调用' 查看层次结构。不,视图控制器对象刚刚离开视图 属性。顺便说一句,视图控制器使用的内存量可以忽略不计。所以不要想太多。如果你想捕捉你的视图控制器对象从内存中释放的时间 put
deinit { print("vc deallocated") }
viewDidUnload,自 iOS 以来已弃用 6,用来做一些最后的清洁工作。
部分正确。请记住,ViewDidload 在视图控制器的生命周期中调用了一次。在 viewdidload 之前调用了一个方法,但这与你的问题无关。
除了“viewdidload之前有一个方法”-> loadView( )
是一个由viewController管理的方法。 viewController 在其当前视图为 nil 时调用它。 loadView( ) 基本上获取一个视图(您创建的)并将其设置为 viewController 的视图(超级视图)。