在开发过程中,几次碰到在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);
}
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];
}