Last active
October 7, 2015 12:27
-
-
Save xiangyuan/3164566 to your computer and use it in GitHub Desktop.
ios中ViewController加载过程描述
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
iewController的初始化: | |
从Storyboards中加载的时候,会调用initWithCode,如果不存在则调用init。之后对里面的每个对象调用awakeFromNib方法。 | |
从内存中alloc出来的情况下,调init方法。 | |
ViewController查找与其关联的view,其顺序是: | |
1 先判断子类是否重写了loadView,如果有直接调用。之后调viewDidLoad完成View的加载。 | |
2 如果是外部通过调用initWithNibName:bundle指定nib文件名的话,ViewController记载此nib来创建View。 | |
3 如果initWithNibName:bundle的name参数为nil,则ViewController会通过以下两个步骤找到与其关联的nib。 | |
A 如果类名包含Controller,例如ViewController的类名是MyViewController,则查找是否存在MyView.nib; | |
B 找跟ViewController类名一样的文件,例如MyViewController,则查找是否存在MyViewController.nib。 | |
4 如果子类没有重写的loadView,则ViewController会从StroyBoards中找或者调用其默认的loadView,默认的loadView返回一个空白的UIView对象。 | |
注意第一步,ViewController是判断子类是否重写了loadView,而不是判断调用子类的loadView之后ViewController的View是否为空。就是说,如果子类重写了loadView的话,不管子类在loadView里面能否获取到View,ViewController都会直接调viewDidLoad完成View的加载。 | |
ViewController的卸载View的步骤: | |
1 系统发出警告或者ViewController本身调用导致didReceiveMemoryWarning被调用 | |
2 调用viewWillUnload之后释放View | |
3 调用viewDidUnload | |
5,在需要显示之前,viewWillAppear会被调用,显示完毕viewDidAppear会被调用(从其它程序切换回来显示这个页面的时候,这两个函数是不会被调用的) | |
6,在跳转到本程序其它页面的之前(presentModelViewController, pushViewController),viewWillDisappear会被调用, 之后viewDidDisappear会被调用(按home键退出或者切换到其它程序的时候,这两个函数也是不会被调用的) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment