【iOS】UIViewController生命周期
2015-09-18 19:09
351 查看
UIViewController有2周期:
在UIViewController中,View存在两个循环:载入循环和卸载循环。
![](http://img.blog.csdn.net/20140616215436296)
载入循环
1》程序请求controller的view。
2》假设view在内存中,则直接载入。相反,假设不存在。则UIViewController调用loadView方法。
3》loadView方法运行例如以下操作:
假设你重载了这种方法,则必须创建必要的view而且将一个非nil值传给UIViewController的view属性。
假设你没有重载这个函数,UIViewController会默认使用UIViewController的nibName和nibBundle属性尝试从nib文件载入view。假设没有找到nib文件,它尝试寻找一个与UIViewController类名匹配的nib文件。
假设没有可用的nib文件,那么它创建一个空的UIView作为它的view。
4》UIViewController调用viewDidLoad来运行一些载入时任务。
卸载循环
1》程序收到内存警告。
2》每一个UIViewController调用didReceiveMemoryWarning。默认会安全地释放掉view。
3》假设UIViewController释放掉了它的view,它会调用viewDidUnload。能够重载这种方法来进行额外的清理工作。
1、 alloc 创建对象,分配空间
2、init (initWithNibName) 初始化对象,初始化数据
3、loadView 从nib加载视图 ,通常这一步不须要去干涉。除非你没有使用xib文件创建视图
4、viewDidLoad 加载完毕,能够进行自己定义数据以及动态创建其它控件
5、viewWillAppear 视图将出如今屏幕之前,立即这个视图就会被展如今屏幕上了
6、viewDidAppear 视图已在屏幕上渲染完毕
当一个视图被移除屏幕而且销毁的时候的运行顺序,这个顺序差点儿相同和上面的相反。
1、viewWillDisappear 视图将被从屏幕上移除之前运行
2、viewDidDisappear 视图已经被从屏幕上移除,用户看不到这个视图了
3、dealloc 视图被销毁,此处须要对你在init和viewDidLoad中创建的对象进行释放
关于viewDidUnload :在发生内存警告的时候假设本视图不是当前屏幕上正在显示的视图的话。 viewDidUnload将会被运行,本视图的全部子视图将被销毁,以释放内存,此时开发人员须要手动对viewLoad、viewDidLoad中创建的对象释放内存。 由于当这个视图再次显示在屏幕上的时候,viewLoad、viewDidLoad 再次被调用,以便再次构造视图。
參考:http://blog.csdn.net/huifeidexin_1/article/details/7566226
/article/1406311.html
xn4545945收集整理:http://blog.csdn.net/xn4545945
在UIViewController中,View存在两个循环:载入循环和卸载循环。
载入循环
1》程序请求controller的view。
2》假设view在内存中,则直接载入。相反,假设不存在。则UIViewController调用loadView方法。
3》loadView方法运行例如以下操作:
假设你重载了这种方法,则必须创建必要的view而且将一个非nil值传给UIViewController的view属性。
假设你没有重载这个函数,UIViewController会默认使用UIViewController的nibName和nibBundle属性尝试从nib文件载入view。假设没有找到nib文件,它尝试寻找一个与UIViewController类名匹配的nib文件。
假设没有可用的nib文件,那么它创建一个空的UIView作为它的view。
4》UIViewController调用viewDidLoad来运行一些载入时任务。
卸载循环
1》程序收到内存警告。
2》每一个UIViewController调用didReceiveMemoryWarning。默认会安全地释放掉view。
3》假设UIViewController释放掉了它的view,它会调用viewDidUnload。能够重载这种方法来进行额外的清理工作。
UIViewController的生命周期:
当一个视图控制器被创建。并在屏幕上显示的时候。 代码的运行顺序1、 alloc 创建对象,分配空间
2、init (initWithNibName) 初始化对象,初始化数据
3、loadView 从nib加载视图 ,通常这一步不须要去干涉。除非你没有使用xib文件创建视图
4、viewDidLoad 加载完毕,能够进行自己定义数据以及动态创建其它控件
5、viewWillAppear 视图将出如今屏幕之前,立即这个视图就会被展如今屏幕上了
6、viewDidAppear 视图已在屏幕上渲染完毕
当一个视图被移除屏幕而且销毁的时候的运行顺序,这个顺序差点儿相同和上面的相反。
1、viewWillDisappear 视图将被从屏幕上移除之前运行
2、viewDidDisappear 视图已经被从屏幕上移除,用户看不到这个视图了
3、dealloc 视图被销毁,此处须要对你在init和viewDidLoad中创建的对象进行释放
关于viewDidUnload :在发生内存警告的时候假设本视图不是当前屏幕上正在显示的视图的话。 viewDidUnload将会被运行,本视图的全部子视图将被销毁,以释放内存,此时开发人员须要手动对viewLoad、viewDidLoad中创建的对象释放内存。 由于当这个视图再次显示在屏幕上的时候,viewLoad、viewDidLoad 再次被调用,以便再次构造视图。
參考:http://blog.csdn.net/huifeidexin_1/article/details/7566226
/article/1406311.html
xn4545945收集整理:http://blog.csdn.net/xn4545945
相关文章推荐
- 云海飞翔lee -- UIAlertController
- 电话通讯录用到的 Rui
- MySQL GUI Tools 使用简介
- Error:No suitable device found: no device found for connection "System eth0"
- ios系列开发之UITableView实现多行删除
- 如何设置UITextField的焦点?
- How-to: use spark to suport query across mysql tables and hbase tables
- iOS探究UITableView的内部代码,仿UITableView自定义
- QEMU Guest Agent
- ios开发系列之UITableView的移动行,编辑行,打开关闭区,刷新表
- UIView的autoresizingMask属性
- UI:沙盒
- Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
- JAVA中的优先级队列PriorityQueue
- iOS中的UITextView
- Samsung手机ClipboardUIManager引起的内存泄漏
- iOS中的UISearchBar
- iOS中的UIDatePicker 日期选择器
- iOS中的UIAlertContrller
- LigerUI之Grid使用详解(一)——显示数据