objective-c - 我在 NSWindow 上调用 'release' 而不是 'close' ?

标签 objective-c cocoa

当我完成弹出 NSWindow 时,我调用以下代码行:

if (imageDroppedActionPopup) {
    [[self window] removeChildWindow:imageDroppedActionPopup];
    [imageDroppedActionPopup orderOut:nil];
    [imageDroppedActionPopup close];
    imageDroppedActionPopup = nil;
}

我现在想知道是否可以替换

[imageDroppedActionPopup close];

[imageDroppedActionPopup release];

它似乎工作正常。但我想知道这是否正确。

我这样做的原因是,如果我出于某种原因使用 close,应用程序焦点将返回到主文档窗口,而不是当前的 NSWindowController 窗口,即上面提到的弹出父窗口。

最佳答案

close 从屏幕上删除窗口,release 减少对象的保留计数器,并且可能会或可能不会导致它被释放。

它似乎有效,因为被释放意味着从屏幕上删除,但这些方法永远不能相互替代。即使您是唯一的所有者,您也永远无法确定release会导致立即释放(因此窗口也不会立即消失),因为该窗口可能会被其他人临时保留。

当您需要关闭窗口时,调用close。并且严格按照内存管理规则,您只能对保留、分配或复制的对象调用release

考虑到用 release 替换 close 并没有导致崩溃,我认为你两者都需要。

关于objective-c - 我在 NSWindow 上调用 'release' 而不是 'close' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9734508/

相关文章:

ios - 为什么 GCDAsyncSocket 连接在设备锁定时被终止,但在按下主页按钮时却没有?

iphone - 键值观察对 UITextView 的 Text 属性有效吗?

ios - 如何将 Storyboard与工厂模态视图 Controller 实例化一起使用?

cocoa - 激活时,菜单栏应用程序中的“关于”面板不是最前面的

ios - 使用共享实例方法禁用 UIButton

ios - UIView 中的自动布局问题

ios - 在返回对象之前验证每个属性

ios - 如何从 JSON NSDictionary 创建对象

objective-c - 如何从常量字符串中提取纯字符串

cocoa - 如何获取 Mac OS X 事件桌面的 ID?