天天看点

UIViewController中loadView与viewDidLoad,viewDidUnload,dealloc知识

我在cocoachina里看到的提问帖子(http://www.cocoachina.com/bbs/read.php?tid=33608&page=1#481517),觉得自己也不是很清楚,于是去网上搜了下

stackoverflow    http://stackoverflow.com/questions/573958/iphone-sdk-what-is-the-difference-between-loadview-and-viewdidload

苹果官网说明  http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/BasicViewControllers/BasicViewControllers.html#//apple_ref/doc/uid/TP40007457-CH101-SW19

通过各种翻阅...总结如下:

view有两个重要circle

一: 加载

1.loadView 只有在你在代码中创建实现你的view时需要在对应UIViewController里重写该方法。

注意:不要super loadView以减少资源消耗.

2.viewDidLoad 无论你是否用Interface Builder创建nib文件创建UIViewController ,这个方法都会被调用的。它是用来做一些额外在你架子啊你的view时需要做的任务。

3.如果在UIViewController里存储了IBOutlet,和UIView或者其子类,在viewDidUnload里都要赋值它们为nil,用self.xxx方式,因为这同时会出发setter里的release方法。否则会有leak。

4.每一个UIViewController都会有一个view property,这是default的,在UIViewController初始化后,当程序某部分访问view时,这时如果view是没有在内存中存在,view controller会调用loadView方法。

如果你重写了loadView,你需要创建所有相关的views,并且赋值view一个非nil值。

如果你没有重写这个方法,默认初始化方式使用view controller的nibName和nibBundle属性来试图从一个专有的nib文件加载。如果没有找到那个专有的那个nib文件,默认会去找一个名字与view controller相匹配的nib文件去加载。

如果没有有效的nib文件,默认实现最后会返回一个空view,并且赋值给view这个property。

UIViewController中loadView与viewDidLoad,viewDidUnload,dealloc知识

二:卸载

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工作。

UIViewController中loadView与viewDidLoad,viewDidUnload,dealloc知识