导航栏互相加载的栈操作问题

来源:互联网 发布:mac玩魔兽世界怎么样 编辑:程序博客网 时间:2024/06/05 03:27
使用导航栏时,
A为根视图控制器
A加载B
B加载C

 在A的 viewWillDisappear方法中对当前控制器设置导航栏隐藏
当A调用B时,导航栏隐藏,B调用C也隐藏了(因为A,B,C使用的是同一个导航栏),现象正常

在C的 viewWillDisappear方法中对当前控制器设置导航栏隐藏,当C退回到B时,发现没有隐藏,退回A时,也没有隐藏,(因为A,B,C使用的是同一个导航栏,所以C操作后应该会影响B和A才对),现象好像不正常,为什么?

因为A加载B,B加载C饿操作是一个栈操作

A在栈底,加载B,再由B加载C后,会有ABC的栈结构,此时A在执行viewWillDisappear方法的前后都存在,所以不管怎么操作都会影响导航栏在ABC三个界面上的状态;
但是C退回到B,B退回到A是一个弹栈操作,不能保证在C viewWillDisappear之前是否C本身就已经被弹出栈(栈变量被弹出即立即释放),所以在执行操作时,C已经被释放了,所以操作无效
0 0