【问题标题】:How do I get Storyboarded windows and their contents to release on close?如何让 Storyboarded 窗口及其内容在关闭时发布?
【发布时间】:2014-12-10 18:37:00
【问题描述】:

我正在为 Yosemite 上的 OS X 创建一个简单的单窗口应用程序,目标是 Mavericks,用 Swift 实现。我的故事板是基于默认项目的,所以没有自定义窗口控制器,只有一个ViewController.swift。当我关闭窗口时,该视图控制器的实例不会被释放(deinit 中的代码永远不会执行),尽管我在情节提要中为 NSWindow 对象检查了“关闭时释放”。

此外,如果我再次打开它(使用“显示”segue),它似乎是窗口的一个新实例,而不是现有的、未发布的实例。结果是,如果我多次打开和关闭窗口,则会为每个新窗口创建视图控制器的新实例,但当然不会在关闭时释放。应用程序继续消耗每个窗口的内存似乎很愚蠢。

如何让窗口在关闭时真正释放自身以及相关的控制器和视图?


更新:我发现,虽然在 IB 中勾选了“Release When Closed”,但在 viewWillAppear() 中是错误的。如果我在此处将其设置为 true,则当我关闭窗口然后再次打开它时,当我再次关闭它时,我会收到一个 EXC_BAD_ACCESS 错误,它只指向我的 AppDelegate 类。 :-(

【问题讨论】:

    标签: macos nswindow appkit nsviewcontroller


    【解决方案1】:

    如果我再次打开它(使用“显示”转场),它似乎是窗口的一个新实例,而不是现有的、未发布的实例。

    您需要将演示文稿设置为单张,默认为多张。

    确保您点击了情节提要上 viewController 上的 viewController 按钮: enter image description here 然后更新演示文稿: enter image description here

    【讨论】:

      【解决方案2】:

      我刚刚在最新的 Xcode 6.2 测试版中运行了我的应用程序,问题不再存在。不确定我是否正确地记住了它,我在 Xcode 6.1.1 中运行了该项目,并且反复打开和关闭单个窗口继续使应用程序变大。

      所以看起来这是一个由 Xcode 6.2 构建的已修复应用程序的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 2013-02-17
        相关资源
        最近更新 更多