UIViewController中存在的2个循环:
在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》程序收到内存警告。
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
http://blog.csdn.net/teamlet/article/details/8579129
xn4545945收集整理:http://blog.csdn.net/xn4545945