我正在创建一个新的NSWindow:
- (void)newWindow
{
if (!_myWindow)
{
self.myWindow = [[myWindowController alloc] initWithWindowNibName:@"myWindow"];
}
[self.categoriasView showWindow:self];
}
但是我想在使用NSWindowController关闭窗口时释放窗口对象:
- (void)windowWillClose:(NSNotification *)notification
{
}
我已经尝试过[self.window setReleasedWhenClosed:YES];但是在关闭窗口后,对象仍然存在。
你们都知道关闭窗口后如何释放NSWindow对象?
非常感谢您的帮助
[首先,窗口(NSWindow
或子类的实例)和窗口控制器(NSWindowController
或子类的实例)有所不同。您的问题和代码似乎可以互换使用这两个术语。
使用窗口控制器时,请勿释放窗口本身。窗口控制器拥有它,并在完成后将其释放。同样,对于窗口控制器拥有的窗口,releasedWhenClosed
被忽略。用getter -isReleasedWhenClosed
记录。
您的代码显然在-isReleasedWhenClosed
属性中强烈引用了窗口控制器(尽管您的代码段也以类似于窗口控制器的方式引用了myWindow
属性)。如果清除该属性,则将释放窗口控制器。如果这是最后一个强引用,则将释放窗口控制器,并释放窗口。
如果已为窗口分配了委托,则可以在窗口委托的categoriasView
方法中清除属性。通常,但不一定,窗口控制器是窗口的委托。您可以在NIB中进行设置。但是,在这种情况下,窗口控制器清除其所有者的属性不是很方便。
另一种方法是让窗口控制器的所有者观察窗口发出的-windowWillClose:
。您可以这样设置:
NSWindowWillCloseNotification
然后,您可以在窗口委托以外的对象中实现
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowWillClose:) name:NSWindowWillCloseNotification object:self.myWindow.window];
方法。在这种方法中,您将执行以下操作:
-windowWillClose:
我给卡塔琳娜州的两分钱。