NSWindowController应该在windowWillClose中释放自己吗?

时间:2011-11-21 13:05:30

标签: objective-c cocoa

我有一个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:作为窗口委托......

1 个答案:

答案 0 :(得分:4)

如果您希望NSWindowController自行释放,您应该使用:

- (void)windowWillClose:(NSNotification *)notification
{
    [self autorelease];
}

autorelease消息确保在释放NSWindowController之前正确处理close事件。

您也可以查看SO entry