gpt4 book ai didi

objective-c - 什么负责释放 NSWindowController 对象?

转载 作者:行者123 更新时间:2023-12-03 16:25:38 24 4
gpt4 key购买 nike

假设我显示一个像这样的窗口:

[[TBAddTaskWindowController new] showWindow:self];

TBAddTaskWindowController 对象要在哪里释放?是在 windowWillClose 中调用 [self release] 的通用解决方案吗?

让任何其他对象“拥有”该窗口感觉不对,因为它应该一直存在,直到用户关闭它。

最佳答案

是的,释放窗口 Controller 的常见方法是:

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

窗口 Controller 只需要在窗口存在时就存在,因此当窗口消失时自动释放它是非常有意义的。

记住还要删除任何其他观察者等。

<小时/>[添加了在 ARC 下工作的信息]

对于 ARC,您需要在窗口打开时保留对窗口控件的强引用,然后在窗口关闭时将其删除。
为此,我在窗口上添加了一个使用两种方法控制的类别:

  • pnl_addWindowController — 首次打开窗口时由窗口 Controller 调用
  • pnl_removeWindowController — 从 windowWillClose 调用

该类别维护事件窗口 Controller 的全局NSMutableSet。代码本质上只是 [gWindowControllers addObject:self][gWindowControllers removeAllObjects],其中包含一些 NSMutableSet 的延迟创建和一些锁定。

关于objective-c - 什么负责释放 NSWindowController 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1031715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com