Swift 5 由于内存错误在 400MB 使用内存时崩溃

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

我有一个学习应用程序,我使用以下功能将多个 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)
swift memory memory-management viewcontroller
© www.soinside.com 2019 - 2024. All rights reserved.