如何让Storyboarded窗口及其内容在关闭时发布?

时间:2014-12-10 18:37:00

标签: macos nswindow appkit nsviewcontroller

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

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

如何让Windows实际释放自己以及关闭时的相关控制器和视图?


更新:我发现,虽然"发布时关闭"在IB中检查,在viewWillAppear()中是错误的。如果我在那里设置为true,当我关闭窗口,然后再次打开它,当我再次关闭它时,我得到一个EXC_BAD_ACCESS错误,只指向我的AppDelegate类。 : - (

2 个答案:

答案 0 :(得分:1)

  

如果我再次打开它(使用“show”segue),它似乎是窗口的新实例,而不是现有的未发布的实例。

您需要将演示文稿设置为Single,默认情况下为Multiple。

确保单击storyboard上viewController上的viewController按钮: enter image description here 然后更新演示文稿: enter image description here

答案 1 :(得分:0)

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

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