我有一个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中捕获此操作,该实例已经实例化了所有这个窗口&控制器,因此知道如何/何时释放它们.但是小红色关闭按钮执行关闭:它自己和我所取得的最好的是捕获windowWillClose:作为一个窗口委托……
解决方法
如果您希望NSWindowController自行释放,您应该使用:
- (void)windowWillClose:(NSNotification *)notification { [self autorelease]; }
autorelease消息确保在释放NSWindowController之前正确处理close事件.
你也可以查看这个SO entry.