Swift3.0的所有界面都是由storyboard和UIViewController派生类组成的, UIViewController在MVC模式里的作用是Controller。 如果要跟Android对比的话, 它类似于Activity和Fragment。 建议类成员变量在viewDidLoad函数里赋值,而不是在init构造函数里; 因为在viewDidLoad函数里所有的控件outlet已经赋值了。
要测试界面切换的生命周期, 首先要搞明白Swift有3种界面切换方式, 即UITabBarController(界面底部是切换按钮区),UISlpliteViewControlle(适用于iPad,左边Menu右边操作区)和UINavigationController(界面顶部是切换按钮区)。 下面以Tab页为例:
在设置多界面时可能会删掉storyboard的入口(即第一个打开的界面, 类似于AndroidManifest的Launcher属性), 你需要再添加那个箭头,即选中“is initial View Controller”
显示界面:
Controller1: awakeFromNib
Controller1: viewDidLoad (在该函数做Model的初始化,作用类似于Android Activity的onCreate函数)
Controller1: viewWillApear animated: true
Controller1: viewWillLayoutSubView
Controller1: viewDidLayoutSubViews
Controller1: viewDidAppear animate: true
退出界面:
Controller1: viewWillDisappear animated: true
Controller1: viewDidDisappear animated: true (在该函数或deinit函数里释放内存,不能是耗时操作。作用类似于Android Activity的onDestory函数)
手机横竖屏切换(模拟器用 Command和←或者→ 切换),注意执行了2次WillLayou/DidLayou。有点像Android切换横竖屏时执行2次Activity的创建生命周期。
Controller1: viewWillTransition (横竖屏切换执行,参数里有屏幕宽和高)
Controller1: viewWillLayoutSubView
Controller1: viewDidLayoutSubViews
Controller1: viewWillLayoutSubView
Controller1: viewDidLayoutSubView
生命周期很简单, 但很基础。 想想做Android几年的同学都记不住Fragment的生命周期, 还是要夯实基础!