pushViewController 与 presentViewController 与 TabBarController 之间切换VC

来源:互联网 发布:udp编程bind函数的作用 编辑:程序博客网 时间:2024/06/06 01:46

pushViewController 与 presentViewController 与 TabBarController 之间切换VC

缘由

pushViewController、presentViewController以及TabBarController这3中方法、他们都可以用来切换ViewController。由于在写代码的时候,产生了一些疑惑,切换之前和切换之后的ViewController他们的生命周期是怎么样呢?于是,抱着这样的疑问去敲了一些代码实践一下,增加理解和记忆!代码可以从github中下载。

实践

这里写图片描述
这里写图片描述

从代码的输出日志可以看出来:
pushViewController
[vc1 pushViewController: vc11 ]
这里写图片描述
vc11 返回 vc1
这里写图片描述

presentViewController
[vc2 presentViewController: vc22]
这里写图片描述
[vc22 dismiss] 返回vc2
这里写图片描述

TabbarController
从vc1切换到vc2
这里写图片描述
从vc2切换到vc1
这里写图片描述


总结:

1.当使用pushViewController或者presentViewController来切换视图控制器的时,vc的生命周期如下:(vc1代表,之前的vc,vc11代表之后的vc)

调用push或者present方法时,vc的生命周期方法调用顺序如下:

vc1:viewWillDisapper --->vc11:viewWillAppear --->vc1:viewDidDisappear --->vc11:viewDisAppear

点击返回或者调用dismiss方法,vc的生命周期方法调用顺序如下:

vc11:viewWillDisappear --->vc1:viewWillAppear --->vc11:viewDidDisappear --->vc1:viewDidAppear

点击TabBarController的tab来切换vc,vc的生命周期方法调用顺序如下:

vc2:viewWillAppear --->vc1:viewWillDisappear --->vc1:viewDidDisappear --->vc2:viewDidAppear

有上述可见,使用push或者present弹出、返回(撤销)视图,两者视图控制器的生命周期方法调用顺序都是一样的!而tabbar切换视图,视图控制器的生命周期方法调用顺序却和push或present不同!
区别主要体现在是:
1.push和present的方式:主动!先调用自身的viewWillDisappear

2.tabbar切换的方式:被动!目标vc先调用viewWillAppear之后,自身才去调用viewWillDisappear!

3.viewDidLoad方法,在调用push或者present方法的时候都会触发该方法,而在tabor之间切换vc是不会触发该方法的
0 0
原创粉丝点击