我有一个NSWindowController的子类,如下所示:
@interface MyController : NSWindowController <NSWindowDelegate>
...
- (void)windowWillClose:(NSNotification *)notification;
@end
这是他窗口的代表。一切正常。
但是,为了避免泄漏内存,我应该在实现中这样做吗?
@implementation MyController
...
- (void)windowWillClose:(NSNotification *)notification {
...
[self release];
}
@end
如果我不这样做,当我用小红色关闭按钮关闭窗口时,会调用windowWillClose :,在Instrument中我看到NSWindow已经发布但不是MyController ......
这是“这样做”的方式吗?或者我冒风险?
注意:使用Command-W窗口和控制器正确释放,因为我正在AppDelegate中捕获此操作,该实例已经实例化了所有这个窗口&amp;控制器,因此知道如何/何时释放它们。但是小红色关闭按钮执行关闭:在它自己和我所取得的最好的是捕获windowWillClose:作为窗口委托......
答案 0 :(得分:4)
如果您希望NSWindowController自行释放,您应该使用:
- (void)windowWillClose:(NSNotification *)notification
{
[self autorelease];
}
autorelease
消息确保在释放NSWindowController之前正确处理close事件。
您也可以查看SO entry。