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

通常我们用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中再去赋值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言: 这部分内容,对于大部分人来说使用起来可能已经非常熟练,但是涉及到的细节还是挺多的,对于新开发者可能不是...
    饶鹏伟阅读 1,062评论 1 5
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,728评论 30 472
  • 1、截取字符串”20 | http://www.baidu.com”中,”|”字符前面和后面的数据,分别输出它们 ...
    强子ly阅读 3,170评论 8 46
  • 把网上的一些结合自己面试时遇到的面试题总结了一下,以后有新的还会再加进来。 1. OC 的理解与特性 OC 作为一...
    AlaricMurray阅读 2,705评论 0 20
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,633评论 0 6

友情链接更多精彩内容