pushViewController 与 presentViewController 与 TabBarController 之间切换VC

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是不会触发该方法的
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值