「OC」ViewController的生命周期

发布于:2024-09-18 ⋅ 阅读:(13) ⋅ 点赞:(0)

「OC」ViewController的生命周期

前言

之前学习了MVC的简单入门,我们知道了C指的就是ViewController,那我们就借此机会探究一下ViewController的生命周期相关内容。

基本概念

在iOS之中,我们两类ViewController

一类是用于显示内容的

比如:UIViewControllerUITableViewController等,同时还可以自定义继承自UIViewController的ViewController

一类是viewcontroller的相关容器

UINavigationViewControllerUITabBarControllerUINavigationController是以栈的形式来存储和管理ViewController,一般后一个ViewController一般都会依赖前一个ViewController来进行推出(从相关方法之中的push和pop就可以看出)。UITabBarController是以可变数组的形式来管理ViewController,各个ViewController之间是并列的。

控制器的生命流程

请添加图片描述

生命周期函数

//系统的loadview完成后,执行viewDidLoad
- (void)viewDidLoad;
//这几个生命周期方法,必须熟悉
- (void)viewWillAppear:(BOOL)animated;
- (void)viewDidAppear:(BOOL)animated;
- (void)viewWillDisappear:(BOOL)animated;
- (void)viewDidDisappear:(BOOL)animated;
- (void)viewWillLayoutSubviews NS_AVAILABLE_IOS(5_0);
- (void)viewDidLayoutSubviews NS_AVAILABLE_IOS(5_0);
- (void)didReceiveMemoryWarning;

其实从这些方法的名字大致就能够猜到这些方法所起到的作用了

  1. loadView::创建一个view并且将这个view赋值给controller的view属性
  2. **viewDidLoad:**进行一些比如控件的初始化之类的操作,但是在这个控制器销毁之前只会调用一次该方法
  3. viewWillAppear::添加一些即将要现实出来的方法,由于可以重复调用,当我们在导航栏之中push出控制器的时候,一般都会将tabBar隐藏,在返回主界面的时候再将tabBar给显示出来,这个操作一般就在viewWillAppear之中使用
  4. viewWillLayoutSubviews::即将开始子视图位置布局
  5. viewDidLayoutSubviews::用于通知视图的位置布局已经完成
  6. viewDidAppear::视图已经展示在屏幕上,可以对视图做一些关于展示效果方面的修改。
  7. viewWillDisappear::视图即将消失
  8. viewDidDisappear::视图已经消失

周期函数的调用顺序

那当我们在控制器之中推出另一个控制器,具体的方法调用是什么情况呢?我们来探究一下

首先在控制器之中展示另一个控制器我们可以使用push方法和present方法,以下是两种不同方法的生命周期调用函数情况:

如果我们使用push/pop的方法,那么调用顺序如下:

push

在这里插入图片描述
pop

请添加图片描述

如果我们使用present/dismiss则是如下情况:

present

image-20240910195438037

dismiss

image-20240910195656305

我们不难看出,如果使用push方法的话,前一个控制器会调用disappear系列的方法,那如果使用的是present的方法则对不会调用disappear系列的方法,但是两个方法在初次调用LayoutSubviewsloadview方法之后就不会再对其重新进行调用了。

总结

在iOS开发中,ViewController的生命周期函数扮演着至关重要的角色,控制着视图控制器的加载、显示和消失过程。通过深入理解这些生命周期函数,我们可以更好地管理和控制视图控制器的行为,在需要的地方添加相关逻辑进行操作。