iOS

UIView的生命周期

2019-08-17  本文已影响0人  叫我小黑

思考

  1. loadView、viewDidLoad、viewDidAppear、initWithNibName、awakeFromNib等经常出现在UIViewController中的方法介绍,这些方法分别用来做哪些工作?换言之,创建自定义的view的代码放到以上哪个方法中?
  2. 一个UIView的生命周期是怎样的?以上几个方法的调用顺序如何?
  3. 通过IB和代码加载视图,有什么区别?

UIViewController

-(void)loadView
{
     self.view=[[XXXView alloc] init];
}

处理视图相关通知

在运行时展示View

具体方法的解释

视图的生命周期
到目前为止,我们已经了解了每个方法的作用,接下来就把整个流程梳理一遍。

  1. -[ViewController initWithCoder:] 或 -[ViewController initWithNibName: Bundle: ] 首先从归档文件中加载UIViewController对象。即使是纯代码,也会把nil作为参数传给后者。
  2. -[UIView awakeFromNib:] 作为第一个方法的助手,方便处理一些额外的设置。
  3. -[ViewController loadView] 创建或加载一个view并把它赋值给UIViewController的view属性
  4. -[ViewController viewDidLoad] 此时整个视图层次(view hierarchy)已经被放到内存中,可以移除一些视图,修改约束,加载数据等
  5. -[ViewController viewWillAppear:] 视图加载完成,并即将显示在屏幕上,还没有设置动画,可以改变当前屏幕方向和状态栏的风格等
  6. -[ViewController viewWillLayoutSubviews] 即将开始子视图位置布局
  7. -[ViewController viewDidLayoutSubviews] 用于通知视图的位置布局已经完成
  8. -[ViewController viewDidAppear:] 视图已经展示在屏幕上,可以对视图做一些关于展示效果方面的修改
  9. -[ViewController viewWillDisAppear:] 视图即将消失
  10. -[ViewController viewDidDisAppear:] 视图已经消失

如果考虑UIViewController可能在某个时刻释放整个view。那么再次加载视图时显然会从步骤3开始。因为此时的UIViewController对象依然存在。

总结

上一篇下一篇

猜你喜欢

热点阅读