【发布时间】:2020-02-10 16:01:09
【问题描述】:
我在导航控制器顶部有一个模态视图。
我希望销毁整个堆栈并重新创建一个新堆栈(重新加载)。
但是,当将新的分配给 window.rootViewController 时,运行时会出现警告,并且视图控制器不会被释放。
为了让事情变得更复杂,我会在重新加载时“自动”导航到模态视图控制器,并且 我附上了一个reprex,它演示了将出现的问题。例如。如果按原样运行,在 iOS 13 上,您会看到计数器从 1 跳转到 3,而在 iOS 12 上,它从 1 跳转到 2。两者都在泄漏内存(部分或全部视图控制器没有被卸载)。
【问题讨论】:
-
尝试创建一个minimal reproducible example。在不知道自己在做什么的情况下很难尝试提供帮助。
-
@DonMag 我在 GitHub 上添加了可以重现我的问题的示例项目。请参考 RVCtriggerVC。
-
我也重写了这个问题,以便更简单明了地理解。
-
好吧 - 很混乱,因为你有一个
TriggerVC(RVCTriggerVC类),但你的RVCNavRootVC有一个情节提要 ID "triggerVC"。你的目标是什么?您想从“第一屏”作为 NavVC 根目录开始,按一下按钮到“第二个屏幕”,按一下按钮呈现“第三个屏幕”,然后按一下按钮应该是什么?将所有内容替换为“第三屏”作为 NavVC 根?还是回到原点? -
我对 Storyboard ID 的命名错误,但这是正确的。从作为 NavVC 根目录的“第一个屏幕”开始,点击按钮进入“第二个屏幕”,点击“第三个屏幕”。 “第三屏幕”中的按钮点击将替换所有内容,并重复,这一次是自动的:“第一屏幕”作为 NavVC 根,自动推送“第二屏幕”,自动呈现“第三屏幕”。此时应该释放之前的“链”。
标签: ios swift cocoa-touch