在开发过程中你可能会发现在控制器中有的初始化方法不会执行,笔者亲自测了一下控制器中的一些初始化方法,对比了一下初始化方法的执行顺序。希望可以帮到大家。
/**
*
测试环境
ios8.3 在viewcontroller中 初始化方法的执行顺序
没有使用
storyboard
*
* @return 方法证明 走的方法是 initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 和 init 方法 打印结果是 2 1 执行顺序可能是 initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 然后执行 init 方法
* init 方法
*initWithCoder:(NSCoder *)aDecoder 这个方法 和 awakeFromNib 没走
*
* @return 方法证明 走的方法是 initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 和 init 方法 打印结果是 2 1 执行顺序可能是 initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 然后执行 init 方法
* init 方法
*initWithCoder:(NSCoder *)aDecoder 这个方法 和 awakeFromNib 没走
*/
/**
* 测试环境iOS 8.3
在viewcontroller中 初始化方法的执行顺序
使用了storyboard
*
* @return 方法证明 走的方法是 initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 和 init 方法 打印结果是 3 4 执行顺序可能是 initWithCoder:(NSCoder *)aDecoder 这个方法 和 awakeFromNib
* initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 和 init 方法没走
* @return 方法证明 走的方法是 initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 和 init 方法 打印结果是 3 4 执行顺序可能是 initWithCoder:(NSCoder *)aDecoder 这个方法 和 awakeFromNib
* initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 和 init 方法没走
*/
- (instancetype)init {
if (self = [super init]) {
//
NSLog(@"1");
}
return self;
}
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
//
NSLog(@"2");
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
//
NSLog(@"3");
}
return self;
}
//方法不走
- (void)awakeFromNib {
[super awakeFromNib];
NSLog(@"4");
}
总结一下:
不使用storyboard的时候 初始化方法 init和 initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 方法 会走 可能先走initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 然后再走init方法
使用storyboard的时候 初始化方法init 方法不执行 执行的是initWithCoder:(NSCoder *)aDecoder 这个方法 和 awakeFromNib 两个方法,执行顺序可能是 initWithCoder:(NSCoder *)aDecoder 这个方法 和 awakeFromNib