您的位置:首页 > 其它

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。

需要用到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被释放。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: