欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

ios的UIView和UIViewController的生命周期

程序员文章站 2022-06-24 19:07:58
目的:巧妙利用UIView和UIViewController的生命周期做合适的事能够提升界面加载的流畅度1、UIVIew状态改变对应的方法调用1.1 UIView显示过程的方法调用顺序如下:willMoveToSuperview:didMoveToSuperviewwillMoveToWindowdidMoveToWindowlayoutSubviews1.2 UIView销毁过程的方法调用顺序如下:willMoveToSupervie...

目的:巧妙利用UIView和UIViewController的生命周期做合适的事能够提升界面加载的流畅度

1、UIVIew状态改变对应的方法调用

1.1 UIView显示过程的方法调用顺序如下:

    1. willMoveToSuperview:
    1. didMoveToSuperview
    1. willMoveToWindow
    1. didMoveToWindow
    1. layoutSubviews

1.2 UIView销毁过程的方法调用顺序如下:

    1. willMoveToSuperview
    1. willMoveToWindow
    1. didMoveToWindow
    1. didMoveToSuperview
    1. dealloc
      注意:Apple建议上面这些方法不需要显式调用,只要重写即可。
      如图1.1 是UIView的测试和图1.2是UIView的生命周期流程图
      ios的UIView和UIViewController的生命周期)
      ios的UIView和UIViewController的生命周期)

2、UIViewController的生命周期

     假设场景:存在三个UIControllerView (A、B、C),页面切换如下:A进入B,在进入C,然后由C返回到B,在返回A,ControllerView的跳转示意图如下:
ios的UIView和UIViewController的生命周期)

2.1 A->B->C生命周期

ios的UIView和UIViewController的生命周期)
ios的UIView和UIViewController的生命周期)

ios的UIView和UIViewController的生命周期)

ios的UIView和UIViewController的生命周期)
ios的UIView和UIViewController的生命周期)

     如图2.2所示:AViewController少initialize和init的方法调用,是因为在我demo测试中AViewController是UITableBar的一个item,而且不是第一个item,根据UITableBar的加载机制,只加载第一个item作为默认(如图2.3所示)。由图2.2可以看出AàB的跳转是全屏模式,在B的生命周期符合图2.1所展示的,而BàC不是全屏模式。其原因是在iOS 13的模态跳转中(如图2.4所示),需要指定跳转的模式,若是模式跳转是全屏模式,开启新的VC(我称为子VC)覆盖原来的VC(我成为父VC)则父VC的状态会被系统设置成为不可见(Disappear)。如果不是全屏模式,即在当前的父VC视图是可见的,所以子VC的生命周期没有调用父VC的(Disappear)。
ios的UIView和UIViewController的生命周期)

**注:**使用pushViewController: animated: 跳转的生命周期是一样的。主要区别新开启的ViewController是不是全屏模式,对应着不同的生命周期。

2.2 C->B->A的生命周期

从CVC返回到BVC生命周期是:

    1. CViewController调用viewWillDisappear
    1. BViewController调用viewWillAppear
    1. CViewController调用viewDidDisappear
    1. BViewController调用viewDidAppear
      ios的UIView和UIViewController的生命周期)

####从BVC返回到AVC的生命周期是:

    1. BViewController调用viewWillDisappear
    1. AViewController调用viewWillAppear
    1. AViewController调用viewDidDisappear
    1. BViewController调用viewDidAppear
      ios的UIView和UIViewController的生命周期

Tips:

当系统执行 layoutSubviews 完成后,会触发ViewController的 viewDidLayoutSubviews 方法调用。因为 viewDidLayoutSubviews 是 view 布局更新后会被唯一可靠调用的方法,所以我们应该把所有依赖于布局或者大小的代码放在 viewDidLayoutSubviews 中,而不是放在 viewDidLoad 或者 viewDidAppear 中。这是避免使用过时的布局或者位置变量的唯一方法。

再者, 新手的文章可能有误,请指正。

本文地址:https://blog.csdn.net/song91425/article/details/108717646