iOS ViewController 生命周期最佳实践 [关闭]
Posted
技术标签:
【中文标题】iOS ViewController 生命周期最佳实践 [关闭]【英文标题】:iOS ViewController Life Cycle Best Practices [closed] 【发布时间】:2015-05-28 18:47:20 【问题描述】:有谁知道深入解释视图控制器生命周期的好教程。我已阅读文档,因此请不要将我链接到它们。我只是在寻找每个函数的实用解释,例如 viewDidLoad 和 viewWillAppear、viewWillLayoutSubviews 等,以及何时最好将它们与 Swift 中的示例一起使用。如果没有教程,任何人都愿意在他们的答案中解释它们。
【问题讨论】:
这有帮助吗? ***.com/questions/22214843/… 【参考方案1】:我使用 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 的生命周期。
【讨论】:
是的,这更像是我一直在寻找的东西,谢谢 很高兴回答能帮到你【参考方案2】:这张图片上的例子不错。
【讨论】:
漂亮的图表 - 出自哪里? 有点过时了。视图控制器的view
不再在 didReceiveMemoryWarning
上卸载。
@bteapot 你怎么知道的?
当然来自 Apple 的文档:developer.apple.com/documentation/uikit/uiviewcontroller/…【参考方案3】:
这就是我的看法。
ViewDidLoad - 创建类并从 xib 加载时调用。非常适合初始设置和一次性工作。
ViewWillAppear - 在您的视图出现之前调用,适用于隐藏/显示字段或您希望每次在视图可见之前发生的任何操作。因为您可能会在视图之间来回切换,所以每次您的视图即将出现在屏幕上时都会调用它。
ViewDidAppear - 在视图出现后调用 - 启动动画或从 API 加载外部数据的好地方。
ViewWill/DidDisappear - 与 WillAppear 的想法相同。
ViewDidUnload/ViewDidDispose - 在 Objective C 中,这是你清理和释放东西的地方,但这是自动处理的,所以你不需要在这里做太多。
【讨论】:
viewDidLoad 适用于一次性设置内部内容,但不适用于一次性设置与 UI 元素相关的任何内容,因为在布局之前,它们不一定是正确的大小/位置.以上是关于iOS ViewController 生命周期最佳实践 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章