【问题标题】:Remove NSWindowController from NSMutableArray when window is closed关闭窗口时从 NSMutableArray 中删除 NSWindowController
【发布时间】:2012-08-02 17:16:57
【问题描述】:

我希望能够在 Cocoa 应用程序中创建多个窗口实例。因此,我创建了一个 NSWindowController 和关联的 XIB。在我的应用程序委托中,我有以下代码:

- (IBAction)newWindow:(id)sender
{
    MyWindowController *wc = [[MyWindowController alloc]
            initWithWindowNibName:@"MyWindow"];
    [self.windowControllers addObject:wc];
    [wc showWindow:self];
}

我必须在某处保留一个指向窗口控制器的指针,否则 ARC 会释放它。我发现一个常见的解决方案是将其添加到可变数组中。但是,如果窗口稍后关闭,则引用仍会在数组中,因此不会被释放。

当窗口关闭时,从数组中移除窗口控制器的最佳方法是什么?

【问题讨论】:

    标签: objective-c cocoa memory-management nsmutablearray nswindowcontroller


    【解决方案1】:

    你可以使用-(BOOL)windowShouldClose:(id)senderNSWindowDelegate的实例方法。

    我在文档中找不到它,但请先尝试使用(BOOL)windowWillClose:(id)sender

    here

    【讨论】:

    • 有趣,但这不是说窗口控制器会在 windowWillClose: 中间被 ARC 释放吗?
    • 我还没有使用 ARC,但我读过它。我认为,如果您对窗口控制器有很强的引用,那么您可以自行取消分配它。
    • 在进一步调查之后,看起来窗口控制器在 windowShouldClose: 被调用时被保留了,所以可以从那里从数组中删除它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多