本文属 iOS小经验系列:累积平时看起来简单,容易忽视的边边角角,各路大佬敬请回避。
有个小伙伴新写了一个NextViewController,重写了两个生命周期:
- init
- (instancetype)init{
self = [super init];
if (self) {
self.modalPresentationStyle = UIModalPresentationCustom;
self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
self.edgesForExtendedLayout = UIRectEdgeNone;
self.view.alpha = 0;
self.view.backgroundColor = [UIColor clearColor];
}
return self;
}
- viewDidLoad
- (void)viewDidLoad {
[super viewDidLoad];
//....根据数据源source显示列表数据
}
- 加载代码
跳转的时候用这样的代码:
- (void)nextButtonClick:(UIButton *)sender {
NextViewController *nextVC = [[NextViewController alloc]init];
nextVC.source = [self.source copy];
[self presentViewController:nextVC animated:YES completion:nil];
}
- 问题描述
结果发现,在执行数据源传值 nextVC.source = [self.source copy];
代码之前,NextViewController的 viewDidLoad
死活要先执行,即使还没执行pushViewController。
- 问题原因
造成这个问题的原因是在init的方法中设置self.view相关属性时,会导致viewDidLoad
执行,即使前面的页面还没有push过来,即使还没显示。
- 知识小点
不能混淆和乱用生命周期方法,初始化的方法中不该设置self.view的属性。
网友评论