【问题标题】:Should a NSWindowController release itself in windowWillClose:?NSWindowController 是否应该在 windowWillClose: 中释放自己?
【发布时间】:2011-11-21 13:05:30
【问题描述】:

我有一个这样的 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 中捕获了此操作,该操作已实例化所有此窗口和控制器,因此知道如何/何时释放它们。但是红色的小关闭按钮 performClose: 就其本身而言,我取得的最好成绩是捕获 windowWillClose: 作为窗口委托...

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

    如果你想让 NSWindowController 自己释放,你应该使用:

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

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

    您也可以查看SO entry

    【讨论】:

    • 不再适用于 ARC。
    猜你喜欢
    • 2017-03-31
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多