美文网首页
iOS小经验:初始化的方法中不该设置self.view的属性

iOS小经验:初始化的方法中不该设置self.view的属性

作者: 小码僧 | 来源:发表于2018-09-04 20:52 被阅读470次

本文属 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的属性。

相关文章

网友评论

      本文标题:iOS小经验:初始化的方法中不该设置self.view的属性

      本文链接:https://www.haomeiwen.com/subject/dpvnwftx.html