我有一个学习应用程序,我使用以下功能将多个 ViewController 链接在一起:
let main = UIStoryboard(name: "Main", bundle: nil)
weak var levelCompletedViewController = main.instantiateViewController(withIdentifier: "levelCompletedViewController") as? LevelCompletedViewController
levelCompletedViewController?.modalPresentationStyle = .fullScreen
self.present(levelCompletedViewController!, animated: false)
由于错误,它总是在 24 个 viewController(我需要 32 个)之后崩溃:
Message from debugger: Terminated due to memory issue
在第 32 个 viewController 上,我会调用 dismiss() 来调用 deinit 函数。此外,每次在 viewDidDisappear 中我都会删除所有图像和其他内存密集型变量。
我的内存指示器显示它从未超过 400MB。 但是,我的应用程序每次恰好在 24 个屏幕时崩溃。 (我要32)
我在闭包中使用 [weak self] 并禁用僵尸对象。并且没有无限循环或类似的东西,因为屏幕类型是随机的并且总是在 24 时崩溃。
是否有解决此问题的技巧,例如每次我通过重置根 viewController 或类似的东西从一个 viewController 移动到另一个 viewController 时调用 deinit?
编辑:
正如 Sweeper 在评论中提到的,也有可能在呈现另一个屏幕之前关闭一个屏幕。然而,在这种情况下,我从右到左的自定义过渡将不起作用:
let transition = CATransition()
transition.duration = 0.5
transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
transition.type = CATransitionType.push
transition.subtype = CATransitionSubtype.fromRight
self.view.window?.layer.add(transition, forKey: kCATransition)