你真的了解UIViewController生命周期吗?
一:首先了解一下生命周期图
二:UIViewController 生命周期介绍
1.通过alloc init 分配内存,初始化controller.
2.loadView
loadView方法默认实现[super loadView]
如果在初始化controller时指定了xib文件名,就会根据传入的xib文件名加载对应的xib文件,如果没传xib文件名,默认会加载跟controller同名的xib文件,如果没找到相关联的xib文件,就会创建一个空白的UIView,然后赋給controller的view
3.viewDidLoad
当loadView创建完view之后,此时view已经完成加载了,会调用viewDidLoad方法;一般我会在这里做界面上的初始化操作,比如添加按钮,子视图,等等.
4.viewWillAppear
当view在load完之后,将要显示在屏幕之前会调用这个方法
在重写这些方法时候最好先调用一下系统的方法之后在做操作。
5.viewDidAppear
当view已经在屏幕上显示出来之后,会调用这个方法
当一个视图被移除屏幕并且销毁的时候
6.viewWillDisappear
当视图将要从屏幕上移除时候调用
7.viewDidDisappear
当视图已经从屏幕上移除时候调用
8.dealloc
view被销毁时候调用,如果是手动管理内存的话,需要释放掉之前在init和viewDidLoad中分配的内存(类似alloc,new,copy);dealloc方法不能由我们主动调用,必须等引用计数为0时候由系统调用.
注意:viewDidUnload 在6.0之后已经废弃了。简单来说,对于iOS6,你不需要做任何以前viewDidUnload的事情,更不需要把以前viewDidUnload的代码移动到 didReceiveMemoryWarning方法中
三:UIViewController 生命周期实例
首先创建一个 ViewController,并这个页面上放一个button push到下一个页面;查看它的生命周期执行顺序;
ViewController代码:
- - (void)loadView {
- [super loadView];
- NSLog(@"%@------%s",[self class], __FUNCTION__);
- }
- - (void)viewDidLoad {
- [super viewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
- NSLog(@"%@------%s",[self class], __FUNCTION__);
- self.view.backgroundColor = [UIColor redColor];
- self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(barClick:)];
- }
- - (void)viewWillAppear:(BOOL)animated {
- [super viewWillAppear:animated];
- NSLog(@"%@------%s",[self class], __FUNCTION__);
- }
- - (void)viewDidAppear:(BOOL)animated {
- [super viewDidAppear:animated];
- NSLog(@"%@------%s",[self class], __FUNCTION__);
- }
- - (void)viewWillDisappear:(BOOL)animated {
- [super viewWillDisappear:animated];
- NSLog(@"%@------%s",[self class], __FUNCTION__);
- }
- - (void)viewDidDisappear:(BOOL)animated {
- [super viewDidDisappear:animated];
- NSLog(@"%@------%s",[self class], __FUNCTION__);
- }
- #pragma mark - buttonClick
- - (void)barClick:(UIBarButtonItem *)button {
- FirstViewController *VC = [[FirstViewController alloc] init];
- [self.navigationController pushViewController:VC animated:YES];
- }
第二个控制器FirstViewController 代码:
- - (void)loadView {
- [super loadView];
- NSLog(@"%@------%s",[self class], __FUNCTION__);
- }
- - (void)viewDidLoad {
- [super viewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
- NSLog(@"%@------%s",[self class], __FUNCTION__);
- self.view.backgroundColor = [UIColor greenColor];
- }
- // 视图将要出现时就会调用
- - (void)viewWillAppear:(BOOL)animated {
- [super viewWillAppear:animated];
- NSLog(@"%@------%s",[self class], __FUNCTION__);
- }
- // 视图完全出现时就会调用
- - (void)viewDidAppear:(BOOL)animated {
- [super viewDidAppear:animated];
- NSLog(@"%@------%s",[self class], __FUNCTION__);
- }
- // 视图将要消失会调用
- - (void)viewWillDisappear:(BOOL)animated {
- [super viewWillDisappear:animated];
- NSLog(@"%@------%s",[self class], __FUNCTION__);
- }
- // 视图完全消失会调用
- - (void)viewDidDisappear:(BOOL)animated {
- [super viewDidDisappear:animated];
- NSLog(@"%@------%s",[self class], __FUNCTION__);
- }
在ViewController页面中有一个button 点击button可以push到FirstViewController 由程序运行结果可知: 当刚运行程序时按顺序依次执行:
- . loadView
- . viewDidLoad
- . viewWillAppear
- . viewDidAppear
- . viewWillDisappear
- . FirstViewController loadView
- . FirstViewController viewDidLoad
- . FirstViewController viewWillAppear
- . viewController viewDidDisappear
- . FirstViewController viewDidappear
当再一次点击左上角的返回键时 从FirstViewController跳转到viewController 由程序的运行结果可知 程序的运行顺序为;
- . loadView
- . viewDidLoad
- . viewWillAppear
- . viewDidAppear
- . viewWillDisappear
- . FirstViewController loadView
- . FirstViewController viewDidLoad
- . FirstViewController viewWillAppear
- . viewController viewDidDisappear
- . FirstViewController viewDidappear
- . FirstViewController viewWillDisappear
- . viewController viewWillAppear
- . FirstViewController viewWillDisappear
- . viewController viewDidAppear
从程序的执行顺序可以看出来每个viewController只执行一次loadView和viewDidLoad
最近有个妹子弄的一个关于扩大眼界跟内含的订阅号,每天都会更新一些深度内容,在这里如果你感兴趣也可以关注一下(嘿对美女跟知识感兴趣),当然可以关注后输入:github 会有我的微信号,如果有问题你也可以在那找到我;当然不感兴趣无视此信息;
你真的了解UIViewController生命周期吗?的更多相关文章
- UIViewController生命周期
UIViewController生命周期
- initWithFrame、initWithCoder、awakeFromNib的区别和调用次序 & UIViewController生命周期 查缺补漏
当我们创建或者自定义一个UI控件时,就很可能会调用awakeFromNib.initWithCoder .initWithFrame这些方法.三者的具体区别如下: initWithFrame: 通过代 ...
- iOS对UIViewController生命周期和属性方法的解析
目录[-] iOS对UIViewController生命周期和属性方法的解析 一.引言 二.UIViewController的生命周期 三.从storyBoard加载UIViewController实 ...
- 【iOS开发】iOS对UIViewController生命周期和属性方法的解析
iOS对UIViewController生命周期和属性方法的解析 一.引言 作为MVC设计模式中的C,Controller一直扮演着项目开发中最重要的角色,它是视图和数据的桥梁,通过它的管理,将数据有 ...
- UIViewController生命周期控制
UIViewController生命周期控制 UIViewController介绍 官方的介绍例如以下 The UIViewController class provides the fundamen ...
- UIViewController生命周期-完整版
一.UIViewController 的生命周期 下面带 (NSObject)的方法是NSObject提供的方法.其他的都是UIViewController 提供的方法. load (NSObje ...
- 【iOS】UIViewController生命周期
UIViewController有2周期: 在UIViewController中,View存在两个循环:载入循环和卸载循环. 载入循环 1>程序请求controller的view. 2>假 ...
- UIViewController生命周期控制-开发规范
从网上各位iOS们收集并总结: 各方法使用: init 中初始化一些UI组件,比如UIButton,UILabel等 loadView 中 createFields 接受参数,初始化变量 create ...
- UIViewController 生命周期
创建: 1. alloc 创建对象,分配空间 2.init (initWithNibName) 初始化对象,初始化数据 3.loadView 从nib载入视图 ,通常这一步不需要去干涉.除非你没有使用 ...
随机推荐
- 第2/24周 页_SQL Server 中数据存储的基本单位
上周通过探讨SQL Server如何执行一个查询奠定了基础.我也在那里提到页是8kb的缓存.今天我们对页进行进一步集中探讨,从性能调优角度挖掘出更多的细节. 页是SQL Server的基础,在SQL ...
- Visual Studio 2013 和 ASP.NET 预览
VS 2013预览版在2013的TechEd大会由Brain Harry正式发布.这次发布包括了一系列的新特性:工程模板.Scaffolding 升级和Web工具.当你在VS 2013创建一个新工程的 ...
- 分享使用Entity Framework的一个坑:Include无效
如果不想延迟加载,可以通过设置:context.Configuration.LazyLoadingEnabled = false;或查询时加上AsNoTracking()方法即可. 如果不想生成代理, ...
- MVC知识进阶01
下面是在项目中有关于MVC的知识总结,有些地方若不对,请指出. 一:MVC的基本知识 1 名词解释 *惯例优先原则<约定大于配置>:是一种开发设计模式,说是在项目里面使用事先规定的命 ...
- Mac下Vim配置语法高亮
设置终端的字体颜色 如图,打开终端然后,选择偏好设置,再选择描述文件,再窗口左侧可以选择系统配置好的,或者你也可以自定义,最后别忘了把你的配置设置成默认就行 Vim语法高亮设置 只需要找到vimrc配 ...
- Unrecognized attribute 'targetFramework'. Note that attribute names are case-sensitive.
调试网站时,异常出现:Unrecognized attribute 'targetFramework'. Note that attribute names are case-sensitive. S ...
- 基于MVC4+EasyUI的Web开发框架经验总结(10)--在Web界面上实现数据的导入和导出
数据的导入导出,在很多系统里面都比较常见,这个导入导出的操作,在Winform里面比较容易实现,我曾经在之前的一篇文章<Winform开发框架之通用数据导入导出操作>介绍了在Winform ...
- sql 指定值排序
--SELECT [ButtonName] as text,[FunctionName] as handler,[iconCls] --FROM [ButtonTable] where PKID in ...
- Go语言的编程范式
由于比较古怪的语言特性,感觉代码的封装性是一种不同的思路. 包管理的火热程度居然没有nodejs高,这是为什么 package form import ( "encoding/gob&quo ...
- 【书籍下载链接】_1_第一轮_C语言书籍
各位朋友,如果您觉得下载的电子书,看的还可以,请购买纸质版的图书,如果您觉得 您下载的书,不值得一看请在下载后直接删除. Windows汇编:http://dl.vmall.com/c0jk1v970 ...