当我完成弹出 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/