initWithNibName的初始化问题

来源:互联网 发布:城市人口分布大数据 编辑:程序博客网 时间:2024/05/17 08:28

在开发过程中,几次碰到在initWithNibName:nibNameOrNil方法里加载组件或者初始化一些值时,都跟没设置一样,查了一些资料才发现,原来initWithNibName:nibNameOrNil得执行顺序是这样子的


supper :

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

if (self) {

set   param=@“supper-A”

NSLog(@“A-initNIb”);

}

viewDIdLoad

{

[super viewDidiLoad];

NSLog(@“A-view”);

NSLog(param);

}


sub:

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

if (self) {

set   param=@“sub-B”

NSLog(@“B-initNIb”);

}

viewDIdLoad

{

[super viewDidiLoad];

NSLog(@“B-View”);

NSLog(param);


执行sub时输出顺序:

A-initNIb   

A-view

supper-A

B-View

supper-A

B-initNIb


sub-initWithNibName: 里调用supper的initWithNibName:

superclass的initWithNibName方法结束,表示nib文件已加载,则调用sub的 viewDidLoad方法。于是应调用[subclass viewDidLoad]方法。

subclass的viewDidLoad方法又调用了supclass的viewDidLoad方法。

最后才是initWithNibName方法剩余的代码


结论,你在sub里面设置的param=sub-B,并没有起作用输出,因为,在设置之前,sub的view已经执行过了,为了避免这样可以改成

sub

viewDIdLoad

{

NSLog(@“B-View”);

NSLog(param);

[super viewDidiLoad];


- (void)viewDidLoad{

[selfsetWords:@” pleaseanswer the door”];

[super viewDidLoad];

}