iOS-View视图的生命历程
2016-05-02 16:07
549 查看
-[ViewController initWithCoder:]或
-[ViewController initWithNibName:Bundle]:首先从归档文件中加载
UIViewController对象。即使是纯代码,也会把nil作为参数传给后者。
-[UIView awakeFromNib]:作为第一个方法的助手,方便处理一些额外的设置。
-[ViewController loadView]:创建或加载一个view并把它赋值给UIViewController的view属性
-[ViewController viewDidLoad]:此时整个视图层次(view hierarchy)已经被放到内存中,可以移除一些视图,修改约束,加载数据等
-[ViewController viewWillAppear:]:视图加载完成,并即将显示在屏幕上,还没有设置动画,可以改变当前屏幕方向或状态栏的风格等。
-[ViewController viewWillLayoutSubviews]:即将开始子视图位置布局
-[ViewController viewDidLayoutSubviews]:用于通知视图的位置布局已经完成
-[ViewController viewDidAppear:]:视图已经展示在屏幕上,可以对视图做一些关于展示效果方面的修改。
-[ViewController viewWillDisappear:]:视图即将消失
-[ViewController viewDidDisappear:]:视图已经消失
如果考虑UIViewController可能在某个时刻释放整个View。那么再次加载视图时显然会从步骤3开始。因为此时的UIViewController对象依然存在。
DemoViewController *demoVC = [[DemoViewController alloc] init]; [self presentViewController:demoVC animated:YES completion:^{ NSLog(@"presentViewController"); [self dismissViewControllerAnimated:YES completion:^{ NSLog(@"dismissViewContro" @"llerAnimated"); }]; }];
2016-05-02 16:04:15.066 UIViewLifeCycle[1509:685319] initWithNibName
2016-05-02 16:04:15.067 UIViewLifeCycle[1509:685319] init
2016-05-02 16:04:15.068 UIViewLifeCycle[1509:685319] loadView
2016-05-02 16:04:15.068 UIViewLifeCycle[1509:685319] viewDidLoad
2016-05-02 16:04:15.070 UIViewLifeCycle[1509:685319] viewWillAppear
2016-05-02 16:04:15.071 UIViewLifeCycle[1509:685319] viewWillLayoutSubviews
2016-05-02 16:04:15.071 UIViewLifeCycle[1509:685319] viewDidLayoutSubviews
2016-05-02 16:04:15.573 UIViewLifeCycle[1509:685319] viewDidAppear
2016-05-02 16:04:15.573 UIViewLifeCycle[1509:685319] presentViewController
2016-05-02 16:04:15.575 UIViewLifeCycle[1509:685319] viewWillDisappear
2016-05-02 16:04:16.078 UIViewLifeCycle[1509:685319] viewDidDisappear
2016-05-02 16:04:16.078 UIViewLifeCycle[1509:685319] dismissViewControllerAnimated
需要注意的是,[b]initWithNibName方法始终会被调用~[/b]
那么我想到一个问题:我们通常会去提供一些比较完备的初始化方法,写大量重复的代码,现在是不是将一些必须的初始化方法放在[b]initWithNibName方法中,就肯定可以得到执行呢?也就是说,我们无论如何,也应该实现[b]initWithNibName方法?[/b][/b]
[b]Demo下载[/b]
相关文章推荐
- Objective-C的内省(Introspection)用法小结
- Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect实例分析
- Objective-C中使用NSString类操作字符串的方法小结
- Objective-C中NSNumber与NSDictionary的用法简介
- Objective-C中NSLog输出格式大全
- 浅析Objective-C的程序结构及面向对象的编程方式
- 全面解析Objective-C中的block代码块的使用
- Swift调用Objective-C编写的API实例
- Swift、Objective-C、Cocoa混合编程设置指南
- Objective-c代码如何移植为Swift代码 Objective-c代码转移到Swift过程介绍
- Swift调用Objective-C代码
- Objective-C中字符串NSString的常用操作方法总结
- 以实例讲解Objective-C中的KVO与KVC机制
- 简介Objective-C解析XML与JSON数据格式的方法
- 浅析Objective-C中分类Category的使用
- 举例讲解Objective-C中@property属性的用法
- Objective-C编程中语句和变量的一些编写规范建议
- 理解Objective-C的变量以及面相对象的继承特性
- 简单讲解Objective-C的基本特性及其内存管理方式
- Objective-C中编程中一些推荐的书写规范小结