ViewController生命周期
来源:互联网 发布:角谷猜想知乎 编辑:程序博客网 时间:2024/06/06 05:52
首先来看看View的加载过程,如下图:
View的加载
可以看到,在Controller中创建View有2种方法,一种是使用Storyboard等可视化工具,另一种是通过代码创建。可视化创建在工程中很少用到,因为它满足不了开发者如饥似渴的需求--。
代码创建界面文件
1.创建新的Empty Application Project
2.新建ViewController的类,添加loadView方法,及viewDidLoad等方法
3.在AppDelegate.m中的application:didFinishLaunchingWithOptions:中注册ViewController
虽然我们可以在AppDelegate.m中的application:didFinishLaunchingWithOptions:中设置window的代码后面添加view,但是在一般的工程中,我们不会在委托类中管理我们的View。 而是利用委托类中的UIWindow去添加UIViewController,再在ViewController类中去管理View。
附,创建带NavigationController的代码
ViewController生命周期
alloc -> initWithNibName -> loadView -> viewDidLoad -> viewWillAppear -> viewDidAppear -> viewWillDisappear -> viewDidDisappear -> dealloc
注意viewWillUnload和viewDidUnload已经在ios6被废弃了,因为Clearing references to views is no longer necessary。
注意1.没有viewWillLoad。
注意2.viewDidLoad和viewDidUnload并不是成对的。
启动程序
2014-07-28 17:43:36.124 ViewLifeCycle[4007:a0b] View Did Load
2014-07-28 17:43:36.125 ViewLifeCycle[4007:a0b] View Will Appear
2014-07-28 17:43:36.128 ViewLifeCycle[4007:a0b] View Did Appear
按下Home键,并没有任何记录
双击Home键,删除该程序
2014-07-28 17:43:51.327 ViewLifeCycle[4007:a0b] View Will Disappear
2014-07-28 17:43:51.327 ViewLifeCycle[4007:a0b] View Did Disappear
为什么按下Home键之后没有调用viewWillDisappear和viewDidDisappear呢?
因为在ios4后引入了后台的概念,当按下Home键之后,程序被挂起了,但是该View依然是原来的View,并不是新的。所以只有内存不够的时候或程序被终止的时候,才会调用viewWillDisappear和viewDidDisappear。
View的卸载
loadView v.s. viewDidLoad
view的nib文件为nil时,手工创建视图界面时调用loadView;当view的nib文件存在的时候,初始化工作在viewDidLoad中实现。
loadView时view还没有生成,viewDidLoad时,view已经生成了。loadView方法用来创建一个新的view。loadView只会被调用一次,而viewDidLoad可能会被调用多次。
当受到内存警告时,那么此时系统默认操作会检查当前视图控制器的view是否还在使用,如果没在使用且控制器实现了loadView方法,ViewController会将view release并将其指向为nil。
注意,不要在loadView中调用父类方法[super loadView],因为这会影响CPU性能。
注意2,切换前后台不会调用viewWillAppear
小结一下:
loadView和viewDidLoad的区别就是,loadView时view还没有生成,viewDidLoad时,view已经生成了,loadView只会被调用一次,而viewDidLoad可能会被调用多次(View可能会被多次加载),当view被添加到其他view中之前,会调用viewWillAppear,之后会调用viewDidAppear。当view从其他view中移除之前,调用viewWillDisAppear,移除之后会调用viewDidDisappear。当view不再使用时,受到内存警告时,ViewController会将view释放并将其指向为nil。
ViewController的生命周期中各方法执行流程如下:
init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc
- ViewController生命周期
- ViewController 生命周期
- ViewController 生命周期
- Viewcontroller生命周期
- ViewController生命周期
- ViewController生命周期
- ViewController生命周期
- ViewController生命周期
- ViewController生命周期
- ViewController生命周期
- ViewController生命周期
- ViewController生命周期
- ViewController 生命周期
- ViewController生命周期
- ViewController生命周期
- ViewController生命周期
- viewcontroller生命周期
- ViewController/生命周期
- Ajax跨域、Json跨域、Socket跨域和Canvas跨域等同源策略限制的解决方法
- Java中RSA非对称密钥加解密使用示例
- C++ Primer Plus 第六版(中文版)课后编程题----第三章
- GDI+ 双缓冲实现和局部刷新技术
- 高斯曲线拟合原理及实现
- ViewController生命周期
- Jsoup 网页抓取数据之获取汽车时刻表 实例解析
- UVA146 ID codes
- 递归解决全排列
- spring boot jsp
- funm--矩阵的函数运算
- Linux下Socket编程
- Cookie,Session验证机制
- 数据结构课程设计之2048闯关版