view有两个重要circle
加载
-
view(属性) 每一个UIViewController都会有property,叫“view”,这是default的,在UIViewController初始化后,当程序某部分访问view时,这时如果view是没有在内存中存在,view controller会调用loadView方法。
-
loadView 只有在你在代码中创建实现你的view时需要在对应UIViewController里重写该方法。
- 如果你重写了loadView,你需要创建所有相关的views,并且赋值view一个非nil值。
-
如果你没有重写这个方法,默认初始化方式使用view controller的nibName和nibBundle属性来试图从一个专有的nib文件加载。
- 如果没有找到那个专有的那个nib文件,默认会去找一个名字与view controller相匹配的nib文件去加载。
- 如果没有有效的nib文件,默认实现最后会返回一个空view,并且赋值给view。
-
注意:不要
[super loadView]
,减少不必要的资源消耗
-
viewDidLoad 无论你是否用Interface Builder创建nib文件创建UIViewController ,这个方法都会被调用的。它是用来做一些额外在你架子啊你的view时需要做的任务。
-
viewDidUnload 如果在UIViewController里存储了IBOutlet,和UIView或者其子类,在viewDidUnload里都要赋值它们为nil,用self.xxx方式,因为这同时会出发setter里的release方法。否则会有leak。
卸载
view被卸载发生在程序收到系统的low memory warning时。
每一个view controller都会调用自己的didReceiveMemoryWarning
方法。
如果你重写了这个方法,你需要release掉所有你的view controller不在使用的自定义数据。一定不要在这个方法里release你view controller的view property。你必须要使用super方法来执行一些默认操作。
默认实现是只release那些执行release操作安全的view。
如果view controller release它的view,它会调用viewDidUnload方法,你可以重写这个方法来实现一些额外的清除你的views工作。
(转自:http://danielxu.github.io/blog/2013/01/11/uiviewcontroller-life-cycle/)