美文网首页
控制器跳转的生命周期和跳转赋值问题

控制器跳转的生命周期和跳转赋值问题

作者: ___1o_8o | 来源:发表于2016-06-16 12:54 被阅读27次

    通常我们用Push在进行控制器跳转的时候,大家的一般做法是

    UIViewController *vc = [[UIViewController alloc] init];
    [self.navigationController pushViewController:vc animated:YES];
    

    这里其实是有一个陷阱,通常我们会误认为控制器初始化init之后,会根据控制器的生命周期执行去下
    步骤:
    init,
    loadView,
    viewDidLoad,
    ......,
    但是这里的话UIViewController *vc = [[UIViewController alloc] init];只是执行到了init这一步骤,在进行控制器跳转[self.navigationController pushViewController:vc animated:YES];的时候才会从loadView开始执行下去。

    通常我们给控制器传值,有一个习惯性的做法,给目标控制器传入一个模型,在模型的setter方法中给控件赋值。比如我们从Xib中创建视图可能会用到这样的做法,但是这里的话是不能成功的,因为在赋值时控件还没有初始化,是nil值,根本无法赋值,哪怕我们把模型赋值放在push方法之后也是不行的,这里有一个小技巧,就是通过延时执行赋值的方式,但是这样并不是很安全的。所以解决的方法是在setter方法中不要给控件赋值,而是在viewDidLoad中再去赋值。

    相关文章

      网友评论

          本文标题:控制器跳转的生命周期和跳转赋值问题

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