参考文章:http://www.cnblogs.com/Piosa/archive/2012/02/22/2363258.html
参考文章:http://blog.csdn.net/wihing/article/details/7314702
如上图所示:
加载循环:
- 程序请求了controller的view.
- Controller调用alloc创建对象,分配空间
- Controller调用init初始化(如果存在Storyboard会调用initWithCode)
如果view当前不在内存中,controller调用loadview函数。
loadView 进行如下操作:- 如果你重载了这个函数,你应该自己创建必要的views并且将一个非nil值赋给view属性
- 1、 如果你没有重载这个函数,默认实现会使用controller的nibName 和 nibBundle属性来尝试从nib文件加载view。
- 2、如果没有找到nib文件,它尝试寻找一个与view controller类名匹配(viewControllerClassName.nib)的nib文件。
- 3、如果没有可用的nib文件,那么它创建一个空的UIView作为它的view。
controller 调用 viewDidLoad 方法来执行一些控件的加载(加载时一词,相对于编译时、运行时)任务.程序可以重载loadView 和 viewDidLoad来执行一些任务。
- viewWillAppear 视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
- viewDidAppear 视图已在屏幕上渲染完成
卸载循环:
正常卸载
- viewWillDisappear 视图将被从屏幕上移除之前执行
- viewDidDisappear 视图已经被从屏幕上移除,用户看不到这个视图了
- dealloc 视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放
程序收到内存警告
每个view controller调用 didReceiveMemoryWarning:
If you override this method, you should use it to release any custom data that your view controller object no longer needs. You should not use it to release your view controller’s view. You must call super at some point in your implementation to perform the default behavior.(iOS3.0以后
不建议重载这个函数来进行额外的清除操作,使用viewDidUnload)
默认实现会在确定可以安全地释放view时释放掉view通过[super viewDidUnload]。
view的Load和Unload不是成对调用的。
因为viewWillUnload和viewDidUnload这两个函数只在内存警告时被调用。
就算强制将viewController的view设为nil也不会触发。
如果viewController从创建到销毁期间都没有内存警告,那么这两个函数将始终不会被调用。
iOS6已将viewWillUnload和viewDidUnload废弃,原因是UIKit在内存警告的时候已经不会自动释放无用的视图。
详见 viewDidUnload 和 viewWillUnload 被废弃