我有一个使用 ARC 用 Cocoa 编写的应用程序,它允许用户创建和打开新窗口。(它就像一个文档模型,但我没有使用 nsdocument。)
每个新窗口都需要大量内存,如果用户关闭窗口,我想取回这些内存。
我知道这[window close]
只是隐藏了窗口,但我也在使用[[self window] setReleasedWhenClosed:YES]
,但NSwindowcontroller
关闭后它及其窗口仍然存在。
我窗口的 xib 文件中的对象包含许多用 malloc 分配的大型 c 数组,因此我还尝试通过向 windowcontrollerwindowWillClose:
方法内的通知中心发送调用来释放它们,其中通知调用相关对象内的方法来在窗口关闭之前释放 C 数组。同样,这是没有效果的——即使尝试释放数组的方法被调用并且数组显然被释放,根据活动监视器,没有内存被释放。我也尝试过释放 中的数组-(void) dealloc
,但这似乎从来没有在关闭时被调用过。
那么,当窗口关闭时,我怎样才能最好地恢复内存呢?
编辑:根据Benoit对此 stackoverflow 页面的评论,
“但是,窗口控制器拥有的窗口会忽略关闭时的释放。”
真的吗?如果是这样,我怎样才能在 ARC 中解决这个问题?