【发布时间】: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