为什么将rootViewController设置为新的视图控制器,从而保留并重新设置旧的视图控制器堆栈?

问题描述 投票:0回答:1

我的原始堆栈是

UINavigationController -> UIViewController (push) -> TabBar (modal)

而且我想将其更改为一个

UIViewController

由于某种原因,在设置keyWindow.rootViewController = newVC之后,我的旧堆栈被破坏了,但是又被创建了(现在位于新的VC后面),就好像它加载了一个新副本一样。这也正在泄漏内存,因为实例化了一个新副本,并且在我们不需要它时仍再次调用viewDidLoad

为什么当我已经将rootViewController更改为一个全新的版本时,为什么要变得既聪明又呈现呢?

rootViewController trying to be smart and load my tab bar again

更新:流程更清晰

启动:

创建UINavigationController -> UIViewController (push) -> TabBar (modal)

触发“重新加载”,即window.rootViewController = nil

创建TabBar (modal) **

“重新加载”的下一个,即window.rootViewController = UIViewController()

  • deinit启动的UINavigationController -> UIViewController (push) -> TabBar (modal)

  • 显示UIViewController

由于上述奇怪的行为,我的堆栈是这样的:incorrect image这是触摸rootViewController之前的堆栈:correct image

注意:

**我想知道的是为什么为什么only被调用?其余的不是。无论哪种方式,为什么这里的视图控制器都不会被破坏?

ios swift cocoa-touch
1个回答
0
投票
我要说的是在此链接中,请参阅https://stackoverflow.com/a/53370742/5089923

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.