跟着斯坦福白胡子老头学UIViewController的生命周期

本文介绍了在Swift中,UIViewController在MVC模式中的角色,类似于Android的Activity和Fragment。建议在viewDidLoad中初始化成员变量,因为此时控件outlet已赋值。文章详细阐述了通过UITabBarController、UISplitViewController和UINavigationController三种方式切换界面时,UIViewController的生命周期方法调用顺序,包括awakeFromNib、viewDidLoad、viewWillAppear、viewWillDisappear等,并特别指出viewDidDisappear和deinit中适合释放内存。此外,还讨论了横竖屏切换时的生命周期变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           Swift的所有界面都是由storyboard和UIViewController派生类组成,   UIViewController在MVC模式里的作用是Controller。 如果要跟Android对比的话, 它类似于Activity和Fragment。 建议类成员变量在viewDidLoad函数里赋值,而不是在init构造函数里; 因为在viewDidLoad函数里所有的控件outlet已经赋值了。

       要测试界面切换的生命周期, 首先要搞明白Swift有3种界面切换方式, 即UITabBarController(界面底部是切换按钮区),UISlpliteViewControlle(适用于iPad,左边Menu右边操作区)和UINavigationController(界面顶部是切换按钮区)

                        

                                                         设置方法

                                            

                                                                       UITaBarController


           在设置多界面时可能会删掉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的生命周期, 还是要夯实基础!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值