美文网首页
Controller和View的生命周期:

Controller和View的生命周期:

作者: Crazy2015 | 来源:发表于2017-11-22 14:00 被阅读66次

Controller和View的生命周期:

这里指的View是指Controller的View。它作为Controller的属性,生命周期在Controller的生命周期内。就是说你的Controller不能在view释放前就释放了。

图2 ViewController生命周期

view.jpg

当你alloc并init了一个ViewController时,这个ViewController应该是还没有创建view的。

ViewController的view是使用了lazyInit方式创建,就是说你调用的view属性的getter:[self view]。在getter里会先判断view是否创建,如果没有创建,那么会调用loadView来创建view。

loadView完成时会继续调用viewDidLoad。loadView和viewDidLoad的一个区别就是:loadView时还没有view。而viewDidLoad时view以及创建好了。

init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc

单个viewController的生命周期

  • initWithCoder:(NSCoder *)aDecoder:(如果使用storyboard或者xib)
  • loadView:加载view
  • viewDidLoad:view加载完毕
  • viewWillAppear:控制器的view将要显示
  • viewWillLayoutSubviews:控制器的view将要布局子控件
  • viewDidLayoutSubviews:控制器的view布局子控件完成
    这期间系统可能会多次调用viewWillLayoutSubviews 、 viewDidLayoutSubviews 俩个方法
  • viewDidAppear:控制器的view完全显示
  • viewWillDisappear:控制器的view即将消失的时候
    这期间系统也会调用viewWillLayoutSubviews 、viewDidLayoutSubviews 两个方法
    viewDidDisappear:控制器的view完全消失的时候
  • 多个viewControllers跳转
    当我们点击push的时候首先会加载下一个界面然后才会调用界面的消失方法
  • initWithCoder:(NSCoder *)aDecoder:ViewController2 (如果用xib创建的情况下)
  • loadView:ViewController2
  • viewDidLoad:ViewController2
  • viewWillDisappear:ViewController1 将要消失
  • viewWillAppear:ViewController2 将要出现
  • viewWillLayoutSubviews ViewController2
  • viewDidLayoutSubviews ViewController2
  • viewWillLayoutSubviews:ViewController1
  • viewDidLayoutSubviews:ViewController1
  • viewDidDisappear:ViewController1 完全消失
  • viewDidAppear:ViewController2 完全出现

小结:
-整个控制器声明周期: viewDidLoad -> viewWillAppear -> viewWillLayoutSubviews -> viewDidLayoutSubviews -> viewDidAppear -> viewWillDisappear -> viewDidDisappear

相关文章

网友评论

      本文标题:Controller和View的生命周期:

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