View Controller的生命周期
2016-01-06 14:44
274 查看
1、initWithNibName 、 init
init中应该只有相关数据的初始化,而且这些数据都是比较关键的数据,不能出现创建view的代码,也不能够调用self.view,否则会导致viewController创建view。
如果是外部通过调用initWithNibName:bundle指定nib文件名的话,ViewController记载此nib来创建View。
如果initWithNibName:bundle的name参数为nil,则ViewController会通过以下两个步骤找到与其关联的nib。
1)如果ViewController的类名以“Controller”结尾,例如ViewController的类名是MyViewController,则查找是否存在MyView.nib;
2)找跟ViewController类名一样的文件,例如MyViewController,则查找是否存在MyViewController.nib。
2、loadView
只初始化view,一般用于创建比较关键的view如tableView Controller的tabView,UINavigationController的navgationBar,不可调用view的getter(在掉super loadView前),最好也不要初始化一些非关键的view。
3、viewDidLoad:
view已经加载到内存中了。适合创建一些附加的view和控件。
4、viewWillAppear:
view即将显示,但此时其superView还为nil,即view还没有加到任何其他view中,但准备要添加到其他View中了。
在view被添加到superview之前,切换动画之前调用。在这里可以进行一些显示前的处理。比如键盘弹出,一些特殊的过程动画(比如状态条和navigationbar颜色)。
5、viewWillLayoutSubviews:
view即将布局其Subviews。比如view的bounds改变了,要调整Subviews的位置,在调整之前要做的一些工作就可以在该方法中实现。
6、viewDidLayoutSubviews:
view已经布局其Subviews。比如view的bounds改变了,已经调整Subviews的位置,在调整完成之后要做的一些工作就可以在该方法中实现。
7、viewDidAppear:
view已经显示,即已经加到其superView中了。view显示后,在切换动画后,如果有需要的操作,可以在这里加入相关代码
8、viewWillDisappear:
view即将从superView中移除,此时还没有调用removeFromeSuperView。
9、viewDidDisappear:
view已经从superView中移除了。
10、dealloc:
view Controller被释放。
init中应该只有相关数据的初始化,而且这些数据都是比较关键的数据,不能出现创建view的代码,也不能够调用self.view,否则会导致viewController创建view。
如果是外部通过调用initWithNibName:bundle指定nib文件名的话,ViewController记载此nib来创建View。
如果initWithNibName:bundle的name参数为nil,则ViewController会通过以下两个步骤找到与其关联的nib。
1)如果ViewController的类名以“Controller”结尾,例如ViewController的类名是MyViewController,则查找是否存在MyView.nib;
2)找跟ViewController类名一样的文件,例如MyViewController,则查找是否存在MyViewController.nib。
2、loadView
只初始化view,一般用于创建比较关键的view如tableView Controller的tabView,UINavigationController的navgationBar,不可调用view的getter(在掉super loadView前),最好也不要初始化一些非关键的view。
需要用到view,比如调用了view的getter方法时,在getter里会先判断view是否创建,如果没有创建,那么会调用loadView来创建view,并赋值给ViewController的view属性,在loadView之前view是nil。 如果子类没有重写的loadView,则ViewController会从StroyBoards中找或者调用其默认的l oadView,默认的loadView返回一个空白的UIView对象。 View Controller是判断子类是否重写了loadView,而不是判断调用子类的loadView之后ViewController的View是否为空。就是说,如果子类重写了loadView的话,不管子类在loadView里面能否获取到View,ViewController都会直接调viewDidLoad完成View的加载。 如果手工维护views,必须重载该方法。 如果使用IB维护views,不能重载该方法。 If you use Interface Builder to create your views and initialize the view controller, you must not override this method. (补充:此方法在控制器的view为nil的时候被调用。 此方法用于以编程的方式创建view的时候用到。loadView是使用代码生成视图的时候,当视图第一次载入的时候调用的方法。用于使用(写)代码来实现控件。)
3、viewDidLoad:
view已经加载到内存中了。适合创建一些附加的view和控件。
4、viewWillAppear:
view即将显示,但此时其superView还为nil,即view还没有加到任何其他view中,但准备要添加到其他View中了。
在view被添加到superview之前,切换动画之前调用。在这里可以进行一些显示前的处理。比如键盘弹出,一些特殊的过程动画(比如状态条和navigationbar颜色)。
5、viewWillLayoutSubviews:
view即将布局其Subviews。比如view的bounds改变了,要调整Subviews的位置,在调整之前要做的一些工作就可以在该方法中实现。
6、viewDidLayoutSubviews:
view已经布局其Subviews。比如view的bounds改变了,已经调整Subviews的位置,在调整完成之后要做的一些工作就可以在该方法中实现。
7、viewDidAppear:
view已经显示,即已经加到其superView中了。view显示后,在切换动画后,如果有需要的操作,可以在这里加入相关代码
8、viewWillDisappear:
view即将从superView中移除,此时还没有调用removeFromeSuperView。
9、viewDidDisappear:
view已经从superView中移除了。
10、dealloc:
view Controller被释放。
相关文章推荐
- Eclipse Junit测试报initializationError错误
- 1 Maven-简介
- cocos2dx网络连接部分深入学习
- Java模拟Tracert和ping命令实现跃点追踪
- Xsoup 是一款基于 Jsoup 开发的
- git之创建版本库
- iOS开发-工厂模式
- Xsoup 是一款基于 Jsoup 开发的
- 二、Python安装扩展库
- Spark MLlib 之 Basic Statistics
- hibernate事务和jdbc事务冲突问题
- iOS笔记链接
- java中字符串 utf8 转为 gbk
- 在Eclipse中关联Android API源码
- FreeBSD系统SSH连接不上?
- html基础之表单
- SAP MM移动类型概念详述
- ListView 添加长度样式不固定的分割线
- JSONP原理及实现
- windows和linux 下将tomcat注册为服务