loadView 和 viewDidLoad 的区别

本文解析了iOS开发中loadView和viewDidLoad方法的区别及应用场景。loadView适用于以编程方式创建视图,而viewDidLoad则在视图加载时进行初始化工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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];

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值