ios导航栏栈结构的一点理解

前言

前几天和安卓的兄弟讨论一些问题,忽然被问及iOS 导航栏的结构,虽然明确知道是栈结构,但是比如A push B push C push D pop A(或者pop B),这样一个简单的结构,那么pop到A的时候我们通常的做法是这样

for item in (navigationController?.viewControllers)! {
            if item.isKind(of: ViewController.self){
                navigationController?.popToViewController(item, animated: true)
            }
        }

在栈中先找到要pop的控制器,然后pop。那么此时被安卓的兄弟问了一个有意思的问题,此时是将A直接放到了栈顶,还是将B 和 C进行了弹栈之后到达的A呢?


😓

此时瞬间感觉懵逼,也暴露平时知识掌握的不清楚的弱点,于是写了一个demo一探究竟

demo

demo的结构很简单,三个控制器,v, v1,v2,点击v跳转到v1,点击v1跳转到v2,然后pop会v,我们在每个控制器的viewWillAppear中打印avigationController?.viewControllers的数量,

demo结构

如果是将A放至栈顶,则v2 pop 到 v的时候,那么栈内应该还有三个控制器,如果是弹栈的话,那么站内应该只剩一个,then ,do IT
运行图

结果

通过效果图可以看出,是通过弹栈实现的,其实我在打完这个demo之后,看到结果,然后在写博客开头的时候就大致想起来了,以前在学习时候,资料中反复确认iOS 导航栏是一种栈结构,push是入栈,pop是弹栈,弹栈的含义就是从栈中取出,导航栏中取出在声明周期中就已经game over了,所以不可能是在栈中调整顺序,所以知识还是需要多学,更重要的是多思考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,976评论 25 708
  • 枯黄的叶子,犹如衰老的舞者拖着残美的舞姿,缓缓地跌落在坚硬的水泥地上。 秋风吹起,它或乘着风顺势而上,再次舞出它最...
    鱼它湱阅读 209评论 0 0
  • -01- 时间走得快,日子过得糊涂。 不知道是今天早上还是昨天早上,迷迷糊糊中醒来感觉有些凉,忽然想,要是有个女朋...
    尾巴涂阅读 362评论 0 0
  • 只是这支笔用惯了而已,并不是因为你。 只是这密码用惯了,含义很酷而已,并不是因为你。
    爱吃鱼和莴苣的狗阅读 118评论 1 0
  • 今天很早起床,想安安静静做点自己的事,却被催着签字、交表格。交了一次,格式不对,又跑了一遍。只想说句操! 明知做的...
    鹊印阅读 1,836评论 0 1