UIViewController 生命周期
前言
UIViewController 往往是 iOS 页面开发的基础,用户交互和数据展示都是由它来控制,了解了它的生命周期,就能做到:在合适的时机,做合适的事情。
顺序
下面对 UIViewController 的每个生命周期函数进行一个打印,确定它们的执行顺序。
@implementation ViewController- (void)loadView
{[super loadView];NSLog(@"%@", NSStringFromSelector(_cmd));
}- (void)viewDidLoad
{[super viewDidLoad];NSLog(@"%@", NSStringFromSelector(_cmd));
}- (void)viewWillAppear:(BOOL)animated
{[super viewWillAppear:animated];NSLog(@"%@", NSStringFromSelector(_cmd));
}- (void)viewWillLayoutSubviews
{[super viewWillLayoutSubviews];NSLog(@"%@", NSStringFromSelector(_cmd));
}- (void)viewDidLayoutSubviews
{[super viewDidLayoutSubviews];NSLog(@"%@", NSStringFromSelector(_cmd));
}- (void)viewDidAppear:(BOOL)animated
{[super viewDidAppear:animated];NSLog(@"%@", NSStringFromSelector(_cmd));
}@end
复制代码
含义
- loadView
此时,控制器的 view 还未初始化,可以通过重写这个方法自定义控制器的 View,如果这样做,那就不能调用[super loadView]
(上面代码调用是为了方便打印,不然屏幕就是黑的)。
- viewDidLoad
在控制器的生命周期中,它只会被调用一次,此时,view 已经初始化好,非常适合做一些页面的初始化任务。由于此时 view 的 bounds 尚未确定,所以不适合写 frame 类型的布局代码,但是给视图添加约束没有影响。
- viewWillAppear
它会在控制器的视图将要出现在屏幕中时被调用,在控制器生命周期中可能会被调用多次。在此处,适合做一些与视图出现相关联的任务,例如改变状态栏的方向、风格。
- viewWillLayoutSubviews
当 view 的子视图即将布局时,此方法会被调用,触发的条件是:
- view 被添加到视图层次中
- view 的 bounds 发生了改变
- 调用了
- setNeedsLayout
方法 - 调用了
- layoutIfNeeded
方法
这个方法是写 frame 布局代码的好地方,将 view 的子视图布局好,每次 view 大小发生改变时,其子视图布局也会相应改变。
- viewDidLayoutSubviews
当 view 的子视图已经布局时,此方法会被调用,触发条件同上。
- viewDidAppear
它会在控制器的视图出现在屏幕后被调用,此时,view 的 bounds 已经确定,不过在这里写布局相关代码,可能会反映到屏幕上。
- viewWillDisappear
视图即将从屏幕中消失时触发。
- viewDidDisppear
视图从屏幕中消失后触发。
问题
1、上面测试代码中,- viewWillLayoutSubviews
方法打印了两次?
答:因为 view 被添加到视图层次中会触发一次,view 的 bounds 改变还会触发一次。
2、有控制器 A、B,从 A push 到 B,是 A 的 - viewDidDisappear
先触发,还是 B 的 - viewWillAppear
先触发?
答:B。
UIViewController 生命周期相关推荐
- iOS对UIViewController生命周期和属性方法的解析
iOS对UIViewController生命周期和属性方法的解析 一.引言 作为MVC设计模式中的C,Controller一直扮演着项目开发中最重要的角色,它是视图和数据的桥梁,通过它的管理,将数据有 ...
- 探究 UIViewController 生命周期
由于种种原因,掘金等第三方平台博客不再保证能够同步更新,欢迎移步 GitHub:github.com/kingcos/Per-.谢谢! Lifecycle of UIViewController in ...
- UIViewController生命周期
2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/notting/blog/77970
- UIViewController生命周期的理解
if (self = [super init])=======>if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOr ...
- 【iOS开发】-UIViewController加载过程和生命周期
文章目录 前言 ViewController执行过程的探讨 ViewControllerOne 函数介绍 顺序引入 ViewControllerSecond引入 ViewControllerOne点击 ...
- iOS UIViewController和UIView的生命周期
文章目录 UIViewController的生命周期 UIView的生命周期 UIViewController和UIView进入展示时整体生命周期调用顺序 开发技巧总结 UIViewControlle ...
- Apple Watch学习之路 生命周期研究
无论是Apple app或者Apple Watch app 掌握整个应用的生命周期尤为重要. 下图是watch app整个生命周期图 watchOS生命周期中在代码中是怎么实现的呢? 当用户在Home ...
- 【转】【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途...
原文网址:http://blog.csdn.net/weasleyqi/article/details/8090373 iOS视图控制对象生命周期-init.viewDidLoad.viewWillA ...
- iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、v...
2019独角兽企业重金招聘Python工程师标准>>> iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.vie ...
最新文章
- Vivado安装器件不全
- es修改排序_java 如何实现ElasticSearch自定义排序
- MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结
- 活久见的重构 - iOS 10 UserNotifications 框架解析
- Nginx 源码分析-- 模块module 解析执行 nginx.conf 配置文件流程分析 一
- 三维叉乘怎么算_3分钟做完这些题,你的CAD才算熟练
- 开放 API 接口签名验证,让你的接口从此不再裸奔 !
- 活动文档服务器,ACTIVEDOC 示例:实现活动文档服务器
- mac perl dbd mysql_Install DBD::mysql for Perl in XAMPP in Mac , solving errors
- FFmpeg mxf扩展hdr、bt2020
- solve函数c语言_c语言:回溯解数独程序
- 2021-06-10 MYSQL存储过程与触发器作业
- i711800h核显相当于什么显卡 i7 11800h相当于台式什么CPU
- 手机充电器的D+,D-电压
- 虚拟私助理要来了,五个行业将受影响人 | 分析
- 华为交换机:利用Excel转换MAC地址公式
- 东北林业大学计算机教师,我校教师马超感动众网友
- np.savetxt保存时数据不使用科学计数法形式
- 计算机的音标英语怎么说,电脑的英文怎么读标准发音
- 网络安全领域内的资格认证相关