loadView 和 viewDidLoad 是 iPhone 开发中肯定要用到的两个方法。 他们都可以用来在视图载入的时候初始化一些内容。但是他们有什么区别呢?
viewDidLoad 方法只有当 view 从 nib 文件初始化的时候才被调用。viewDidLoad 用于初始化,加载时用到。
loadView 方法在控制器的 view 为 nil 的时候被调用。此方法用于以编程的方式创建 view 的时候用到。loadView 是使用代码生成视图的时候,当视图第一次载入的时候调用的方法。用于使用(写)代码来实现控件。用于使用代码生成控件的函数。viewDidLoad ,不论是从xib中加载视图,还是从loadview生成视图,都会被调用。
如:
1. - ( void ) loadView {
2. UIView *view = [ [ UIView alloc] initWithFrame:[ UIScreen
3. mainScreen] .applicationFrame] ;
4. [ view setBackgroundColor:_color] ;
5. self.view = view;
6. [ view release] ;
7. }
你在控制器中实现了 loadView 方法,那么你可能会在应用运行的某个时候被内存管理控制调用。如果设备内存不足的时候, view 控制器会收到 didReceiveMemoryWarning 的消息。 默认的实现是检查当前控制器的 view 是否在使用。如果它的 view 不在当前正在使用的 view hierarchy 里面,且你的控制器实现了 loadView 方法,那么这个 view 将被 release, loadView 方法将被再次调用来创建一个新的 view。
viewDidUnload方法
- 当系统内存吃紧的时候会调用该方法(注:viewController没有被dealloc)
- 内存吃紧时,在iPhone OS 3.0之前didReceiveMemoryWarning是释放无用内存的唯一方式,但是OS 3.0及以后viewDidUnload方法是更好的方式
- 在该方法中将所有IBOutlet(无论是property还是实例变量)置为nil(系统release view时已经将其release掉了)
- 在该方法中释放其他与view有关的对象、其他在运行时创建(但非系统必须)的对象、在viewDidLoad中被创建的对象、缓存数据等
- release对象后,将对象置为nil(IBOutlet只需要将其置为nil,系统release view时已经将其release掉了)
- 一般认为viewDidUnload是viewDidLoad的镜像,因为当view被重新请求时,viewDidLoad还会重新被执行
- viewDidUnload中被release的对象必须是很容易被重新创建的对象(比如在viewDidLoad或其他方法中创建的对象),不要release用户数据或其他很难被重新创建的对象
dealloc方法
- viewDidUnload和dealloc方法没有关联,dealloc还是继续做它该做的事情
如:
- (void)viewDidUnload {
self.startButton = nil;
[setupViewController release];
setupViewController = nil;
}
- (void)dealloc {
[startButton release];
[setupViewController release];
[super dealloc];
}