【问题标题】:How to manage instantiated viewControllers如何管理实例化的 viewController
【发布时间】:2019-05-26 10:33:39
【问题描述】:

总而言之,如何最好地管理 VC?

就我而言,我的游戏中有 3 个 VC。要在它们之间切换,当前 VC 中的一个按钮会激活以下代码:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier:"firstLevel")
self.present(viewController, animated: false, completion: nil)

这段代码有效,但每次它实例化一个新的 VC 时,当有两个相同 VC 副本时,我的游戏中会出现全局变量问题,例如“Score”,我认为这对内存也非常不利。

这个问题的最佳解决方案是什么?

在我实例化下一个 VC 之后,是否应该通过放置以下代码行来关闭当前的 viewController?:

self.dismissViewControllerAnimated(false, completion: nil)

【问题讨论】:

  • 快速提问:您的导航是什么样的?是下一个/上一个方案,还是底部的选项卡等?
  • 第一个 VC 是主屏幕 - 所以它有继续游戏、新游戏等按钮,第二个 VC 是 1 级,您可以通过向上滑动返回第一个 VC。当我按下继续返回到第二个 VC 并且计时器开始以两倍的速度倒计时时,我注意到了一个问题(计时器值是一个全局函数,所以我假设第二个 VC 的两个实例导致了这种情况)
  • 定时器应该在viewDidDisappear中失效

标签: swift xcode uiviewcontroller viewcontroller


【解决方案1】:

替换rootViewController只需要1个vc

 let viewController = storyboard!.instantiateViewController(withIdentifier:"firstLevel")
(UIApplication.shared.delegate as! AppDelegate).window!.rootViewController = viewController 

由于您当前的代码将旧的 vcs 留在堆栈中,这肯定会导致内存问题

【讨论】:

  • 感谢您的回复!那么这个 rootViewController 是做什么的呢?
  • 它让1个vc随时呈现
  • 它会删除同一个 VC 类的重复实例吗?我已经替换了代码,我遇到了同样的问题。
  • 当你回到家里的vc时,它只会是呈现的1
  • deinitvc方法中添加一条打印消息,以在运行上述代码后验证它的释放
猜你喜欢
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 2020-04-28
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 2018-04-28
相关资源
最近更新 更多