initWithNibName的初始化问题
2013-02-24 18:34
609 查看
在开发过程中,几次碰到在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];
}
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];
}
相关文章推荐
- initWithNibName导致的初始化问题
- initWithNibName导致的初始化问题
- initWithNibName导致的初始化问题
- initWithNibName的初始化问题
- iOS 初始化方法 initWithNibName、initWithCoder、awakeFromNib和 loadNibNamed说明
- UI控件初始化问题:initWithFrame和initWithCoder、aweakFromNib的执行
- 对象初始化工作要放在appear方法里,不要在initWithNibName里访问view
- initwithNibName不能初始化wiew
- iOS-initWithNibName/awakeFromNib/initWithCoder 区别
- loadView和viewDidLoad及initWithNibName/awakeFromNib/initWithCoder
- loadView、viewDidLoad、initWithCoder、initWithNibName、awakeFromNib的用法
- iOS Development: Proper Use of initWithNibName:bundle: Affects UITableViewController
- initWithNibName initWithCoder awakeFromNib
- loadView、viewDidLoad、initWithCoder、initWithNibName、awakeFromNib的调用时间及用法
- iOS 开发中init与initWithNibName加载的区别
- loadView viewDidLoad initWithNibName awakeFromNib initWithCoder
- initWithNibName 和 loadNibNamed 的区别
- loadView/viewDidLoad/initWithNibName/awakeFromNib/initWithCoder的用法
- initWithRootViewController、initWithStyle、initWithNibName
- loadView/viewDidLoad/initWithNibName/awakeFromNib/initWithCoder的用法