导航控制器对象使用导航堆栈管理当前显示的屏幕,导航堆栈由视图控制器阵列表示 .
引用和数字都来自Apple official document . 引用提到了单词 navigation stack ,而该图实际上将 NSArray 指向导航堆栈 .
这种描述开始让我感到困惑
阵列中的第一个视图控制器是根视图控制器 . 阵列中的最后一个视图控制器是当前正在显示的视图控制器
引用描述了属于堆栈数据类型的特征,另外,它们确实在StoryBoard中存在 push segue . 似乎UINavigationController确实使用堆栈数据类型而不是数组/ NSArray数据类型 .
Question 1
导航控制器的导航堆栈 Stack 或 Array 使用的数据结构究竟是什么?
Question 2
导航控制器中topViewController和rootViewController有什么区别
2 回答
Question 1 ViewControllers属性在
UINavigationController
定义中定义为NSArray,但具有像popViewController方法和pushViewController方法的堆栈行为,但您也可以修改ViewControllers数组,传递新的Array ViewControllers数组2 Examples of Stack Behaviour Methods
But you can also set your ViewControllers array using this method
Question 2
TopViewController
是您正在查看的当前viewController,rootViewController
是已添加到导航堆栈的firstViewController你的第一个问题的答案是NavigationStack使用堆栈数据结构的 Array Representation . 我认为Stack有两种表示形式,一种是数组,另一种是链表 . 所以 push 和 pop 操作是使用Array在这里执行的,使用: -
你的第二个问题的答案 - 导航控制器的TopViewController表示堆栈顶部的视图控制器,RootViewController是堆栈上的第一个viewcontroller
希望这可以帮助! .