iOS开发基础点滴--关于页面切换时候viewDidLoad, viewWillDisappear等调用顺序顺序

image.png

我们都知道iOS中视图控制器controller的生命周期大概是这样的:
当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序
1、 alloc 创建对象,分配空间
2、init (initWithNibName) 初始化对象,初始化数据
3、loadView 从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图
4、viewDidLoad 载入完成,可以进行自定义数据以及动态创建其他控件
5、viewWillAppear 视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
6、viewDidAppear 视图已在屏幕上渲染完成

当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反
1、viewWillDisappear 视图将被从屏幕上移除之前执行
2、viewDidDisappear 视图已经被从屏幕上移除,用户看不到这个视图了
3、dealloc 视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放
如图就是我创建一个HomeViewController的创建流程


image.png

接下来我再创建一个CustomViewController,并push到这个页面,


image.png

可以看到HomeViewController会在CustomViewController视图加载完成后调用viewWillDisappear然后在CustomViewController渲染视图布局Subviews后即将彻底出现之前调用viewDidDisappear最终CustomViewController调用viewDidAppear完成两个页面push切换过程。
还没完,我们点击返回到HomeViewController再看看两个控制器是怎么完成视图切换的
image.png

可以看到比较相似的也是CustomViewController先调用viewWillDisappear接着才是HomeViewController 调用viewWillAppear然后CustomViewController 调用viewDidDisappear,HomeViewController调用viewDidAppear完成视图切换,最终CustomViewController调用dealloc销毁。
看完push,我们再看看模态切换,当然你可能会认为模态切换两个页面函数调用跟push会一样,事实怎么样还是需要实践了才知道,毕竟实践是检验真理的唯一标准。
废话不多说直接看图说话:
image.jpg

从图中可以看到,红线框里面可以清楚的看到CustomViewController会先调用viewDidAppear然后HomeViewController再调用viewDidDisappear这一点跟push切换不一样。同样我们返回到HomeViewController看看返回时的页面切换过程:


image.png

同样也跟pop返回不一样,也是CustomViewController先调用viewWillDisappear接着HomeViewController会直接连续调用viewWillAppear跟viewDidAppear最后CustomViewController调用viewDidDisappear完成页面切换过程,最后CustomViewController调用dealloc销毁。
结语,可以看见页面切换过程模态跟push,两个页面的函数调用顺序是不一致的,当然这也跟两种模式的机制相关。了解这些函数的不同调用顺序在平时开发过程中也会对我们有很大的帮助。可以根据自己的需求在两个页面重写相应函数并实现自己的功能逻辑代码最终完成自己想要的结果。

你可能感兴趣的:(iOS开发基础点滴--关于页面切换时候viewDidLoad, viewWillDisappear等调用顺序顺序)