1.navigationController、navigationBar和navigationItem三者之间的关系
navigationController和navigationBar之间的关系相当于viewController和view之前的关系,一个是导航栏控制器和导航栏,另一个是视图控制器和视图。虽然在开发中经常使用navigationController中的navigationBar来设置导航栏,但是navigationBar也是一个独立的UI控件,可以不依赖navigationController而使用,navigationController中实现了navigationBar的代理,如果我们只使用navigationBar的话就要自己另外实现其代理方法。
navigationController是一个容器,它的堆栈里面保存的是多个viewController,navigationBar也是容器,它的堆栈结构里保存的是navigationItem。navigationItem是导航栏上显示内容的控件,比如导航栏的title,rightBarButtonItem等内容都是navigationItem中的属性。具体可以用下面这张图来说明(摘自https://juejin.im/post/5a4619cf6fb9a04525787284)
navigationBar中的topItem属性代表着其堆栈中栈顶的navigationItem,也就是当前页面上的viewController的n