【发布时间】:2015-05-28 18:47:20
【问题描述】:
有谁知道深入解释视图控制器生命周期的好教程。我已阅读文档,因此请不要将我链接到它们。我只是在寻找每个函数的实用解释,例如 viewDidLoad 和 viewWillAppear、viewWillLayoutSubviews 等,以及何时最好将它们与 Swift 中的示例一起使用。如果没有教程,任何人都愿意在他们的答案中解释它们。
【问题讨论】:
有谁知道深入解释视图控制器生命周期的好教程。我已阅读文档,因此请不要将我链接到它们。我只是在寻找每个函数的实用解释,例如 viewDidLoad 和 viewWillAppear、viewWillLayoutSubviews 等,以及何时最好将它们与 Swift 中的示例一起使用。如果没有教程,任何人都愿意在他们的答案中解释它们。
【问题讨论】:
我使用 swift 为您展示代码。
import UIKit
class LifeCycleViewController: UIViewController {
// MARK: -property
lazy var testBtn: UIButton! = {
var btn: UIButton = UIButton()
btn.backgroundColor = UIColor.redColor()
return btn
}()
// MARK: -life cycle
override func viewDidLoad() {
super.viewDidLoad()
println("View has loaded")
// set the superView backgroudColor
self.view.backgroundColor = UIColor.blueColor()
// add testBtn to the superView
self.view.addSubview(self.testBtn)
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
println("View will appear")
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
println("View has appeared")
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
println("View will disappear")
}
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated)
println("View has desappeared")
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
println("SubViews will layout")
// layout subViews
self.testBtn.frame = CGRectMake(100, 100, 100, 100)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
println("SubViews has layouted")
var testBtn_Width = self.testBtn.frame.width
println("testBtn's width is \(testBtn_Width)")
}
}
结果如下:
View has loaded
View will appear
SubViews will layout
SubViews has layouted
testBtn's width is 100.0
SubViews will layout
SubViews has layouted
testBtn's width is 100.0
View has appeared
可以清楚地看到 ViewController 的生命周期。
【讨论】:
这张图片上的例子不错。
【讨论】:
view 不再在 didReceiveMemoryWarning 上卸载。
这就是我的看法。
ViewDidLoad - 创建类并从 xib 加载时调用。非常适合初始设置和一次性工作。
ViewWillAppear - 在您的视图出现之前调用,适用于隐藏/显示字段或您希望每次在视图可见之前发生的任何操作。因为您可能会在视图之间来回切换,所以每次您的视图即将出现在屏幕上时都会调用它。
ViewDidAppear - 在视图出现后调用 - 启动动画或从 API 加载外部数据的好地方。
ViewWill/DidDisappear - 与 WillAppear 的想法相同。
ViewDidUnload/ViewDidDispose - 在 Objective C 中,这是你清理和释放东西的地方,但这是自动处理的,所以你不需要在这里做太多。
【讨论】: