ios - 实例化新 View Controller 时从内存中删除 View Controller

标签 ios swift memory-leaks

在我的应用程序中,我正在实例化新的 View Controller 而不是使用 segues,因为它在动画中看起来更好,因此我的 View 在后台继续运行。这会导致大量内存泄漏。

我返回主屏幕的代码是:

let mainStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
        let vc  : UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainScreen") as UIViewController
        self.presentViewController(vc, animated: false, completion: nil)

此 View Controller 在后台仍然处于事件状态,因此不应再次实例化。我该怎么做。

当我使用上面的代码关闭我的 View Controller 时,它也没有卸载它,它继续在后台运行。如何让它在屏幕消失后立即卸载。

我试过

override func viewDidDisappear(animated: Bool) {
    super.viewDidDisappear(animated)
    view.removeFromSuperview()
    view = nil
}

但是这不能正常工作。以这种方式退出 View Controller 时,如何从内存中正确销毁 View Controller 。

最佳答案

你只需要使用:

编辑 Swift 4.2

self.dismiss(animated:true, completion: nil)

剩下的工作由 ARC 完成

为了在调试期间帮助您,您还可以添加以下代码:

 if let app = UIApplication.shared.delegate as? AppDelegate, let window = app.window {
        if let viewControllers = window.rootViewController?.children {
            for viewController in viewControllers {
                print(viewController.debugDescription)
            }
        }
    }

关于ios - 实例化新 View Controller 时从内存中删除 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36920859/

相关文章:

ios - 保留格式属性时NSAttributedString字体更改

swift - 如何在 Swift 中将 block 引用应用于 UIWebView

iphone - 将 UIImage 分配到内存并释放它的正确方法是什么

android - 内存泄漏 ;对象没有 GC 根

C - 使用 open() 和 fdopen() 时关闭文件的正确方法

ios - MPMoviePlayerController 已弃用,现在怎么办?

ios - 关于从 UIView 派生的自定义类的边界/框架的问题

ios - 单击其他按钮顶部的“禁用”按钮会触发另一个按钮的单击事件

ios - 为什么 SwiftUI 中的 Today App Extension Widget 是白色的?

ios - SourceKitService 已终止,没有 Xcode 警告或错误