实例化新视图控制器时从内存中删除视图控制器

2024-07-04

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

我返回主屏幕的代码是:

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

该视图控制器在后台仍然处于活动状态,因此不应再次实例化。我该怎么做呢。

当我使用上面的代码关闭视图控制器时,它也不会卸载它,它会继续在后台运行。如何让它在屏幕消失后立即卸载。

我试过做

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

然而这不能正常工作。以这种方式退出视图控制器时,如何正确地从内存中销毁视图控制器。


您只需要使用:

编辑斯威夫特 4.2

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

其余的工作是通过ARC https://en.wikipedia.org/wiki/Automatic_Reference_Counting

为了在调试过程中为您提供帮助,您还可以添加以下代码:

 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)
            }
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实例化新视图控制器时从内存中删除视图控制器 的相关文章

随机推荐

  • 具有不同配置的 NLog 记录器

    在 NLog 中可以创建具有不同配置的多个记录器吗 我有一个组件 每次实例化时都必须将所有事件记录到与新实例相关的不同文件中 NLog 可以做到这一点吗 如果没有 有日志框架可以做到这一点吗 是的 你可以这么做 您可以配置该类型的记录器以记
  • Jetpack Compose 更改滑块拇指尺寸

    有没有办法改变滑块拇指大小 我认为现在我们只能操纵颜色 var sliderPosition by remember mutableStateOf 0f Text text sliderPosition toString Slider va
  • VueJS/Typescript - 找不到模块“./components/Navigation”或其相应的类型声明

    当我创建一个脚本作为打字稿 lang ts 时 我收到一条错误消息 找不到模块 components Navigation 或其相应的类型声明 Vetur 2307 我意识到只有当我将 lang 设置为 ts 时才会发生这种情况 这是我构建
  • 在 Visual Studio 2010 Professional 下更改 C++ Windows 窗体应用程序的启动窗体

    由于某种原因 我似乎找不到一种方法来做到这一点 更改 Visual Studio Professional 2010 下 C Windows 应用程序的启动形式 正如许多网站建议的那样 进入 Project properties Appli
  • 在绘制之前停止 NSView drawRect 清除? (lockFocus 不再在 macOS 10.14 上运行)

    我有一个使用两个视图的动画 我将调用 lockFocus 并使用 NSGraphicsContext currentContext graphicsPort 获取第二个 NSView 的图形上下文 然后进行绘制 在 macOS 10 14
  • Neo4j 节点/关系不一致

    当获取或当我尝试删除特定节点时 例如 MATCH p where ID p 79259223 OPTIONAL MATCH p r drops p s relations DELETE r p 我收到以下错误 在加载节点 79259223
  • cmd 将“字符保存到文件中,不换行

    是否可以将特殊字符 保存到字符串中而无需换行 我尝试了下面的代码 但没有一个工作 echo set p gt gt C text txt echo set p gt gt C text txt echo set p gt gt C text
  • 导入错误:没有名为“appdirs”的模块

    我正在尝试获取一个名为环聊机器人 https github com hangoutsbot hangoutsbot在我的 Linux 服务器上工作 我目前正在使用数字海洋服务器 然而 每次我尝试运行该脚本时 它都会给出一个错误 Import
  • ASP.NET CheckBox 在回发时未选中,没有奇怪的黑客攻击

    我有一个GridView带有复选框列 单击按钮后 所有选中复选框的行都应被删除 我不知何故偶然发现了一个奇怪而老套的解决方案 但我不知道它为什么有效 我已经搜索过相关的SO问题了 相关代码 Protected Sub Page Init B
  • 如何重新连接到 slime/swank-clojure 会话?

    似乎每当我从 clojure slime 会话断开连接时 我就无法再次重新连接 我正在使用 leiningen 启动 swank 会话 使用 lein swank 插件 所以 每次我退出 emacs 我知道我不应该 或重新启动 注销时 我都
  • 如何在microsoft access中动态加载、访问和卸载子表单

    我正在尝试从 ASP NET 过渡到 Access 中的编程 并且当我想到 Access 中的子表单时 我习惯于从用户控件的角度进行思考 我想做的是允许用户单击按钮来加载包含用户可以输入附加数据的控件的子表单 如果有任何信息或资源能够帮助我
  • 为什么同一个lua脚本执行结果不一致?

    为什么同一个lua脚本执行结果不一致 你好 lua obj a haha b jiji c name tom age 15 for i v in pairs obj do if i c then print i v age v name b
  • 使用 jQuery Toggle 更改 div 文本

    使用时slideToggle 如何更改文本关闭 显示 我做了一个简单的操作 但无法恢复文本更改 这是我所做的 document ready function open click function showpanel slideToggle
  • 从 Mac 应用程序启动 Safari

    如何启动 Safari 浏览器或用户的默认浏览器 将其指向 Mac 应用程序中的特定地址 我使用 Objective C 作为编程语言 Thanks 从 shell 中您可以使用open命令以 URL 作为参数 并且负责在默认浏览器中打开该
  • 在 UIPageViewController 中,当“pageViewController:viewControllerBeforeViewController”被调用时?

    我尝试在中显示照片UIPageViewController 首先 我在集合视图中显示我的照片 然后点击一张照片进入页面视图 然而 当我在页面视图中时 如果我滚动当前照片 向右或向左 我发现两者pageViewController viewC
  • iPad ajax 问题

    长话短说 我必须创建一个聊天功能 该功能似乎适用于除 iPad 也可能是 iPhone 之外的所有设备 我们的客户使用他们的 iPad 进行聊天 因此我在过去 7 个月左右的时间里一直在尝试解决这些问题 这就是我花了多长时间才找出问题所在
  • 在 Codeigniter 中创建块/模块

    到目前为止 我一直很喜欢使用 CodeIgniter 创建一些简单的 Web 应用程序 实际上只是学习框架 但我无法找到创建块 模块的简单方法 我希望有一个 最近的图像 块 我可以将其放在网站上的任何页面上 而无需在每个页面的控制器中重复查
  • Resharper 在 Visual Studio 2010 中不断禁用“显示实时语义错误”

    如何防止 Resharper 禁用 Visual Studio 中的 显示实时语义错误 和 下划线错误 选项 似乎每当我手动启用它们时 它们都会在一段时间后以某种方式恢复为禁用状态 我怀疑 Resharper 这样做了 有什么补救办法吗 如
  • 域名注册如何进行? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我在谷歌和维基百科上搜索了很多 但我找不到这些问题的答案 1 注册公司具体做什么 他们更新根 DNS 并在那里设置我的 DNS 的 IP 2 注册商为
  • 实例化新视图控制器时从内存中删除视图控制器

    在我的应用程序中 我实例化新的视图控制器而不是使用 Segues 因为它在动画中看起来更好 因此我的视图继续在后台运行 这会导致大量内存泄漏 我返回主屏幕的代码是 let mainStoryboard UIStoryboard name M