您的位置:首页 > 其它

initWithNibName的初始化问题

2012-04-12 16:40 363 查看
在开发过程中,几次碰到在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];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: