Tom*_*ing 2 cocoa objective-c appkit
让我说我显示一个这样的窗口:
[[TBAddTaskWindowController new] showWindow:self];
TBAddTaskWindowController对象意味着要发布在哪里?是否在windowWillClose中调用[self release]的通用解决方案?
让任何其他对象"拥有"窗口是不对的,因为它意味着存在直到用户关闭它.
是的,释放窗口控制器的常用方法是:
- (void)windowWillClose:(NSNotification *)notification
{
[self autorelease];
}
Run Code Online (Sandbox Code Playgroud)
只要窗口在周围,窗口控制器就需要存活,因此当窗口消失时自动释放窗口控制器非常有意义.
请记住删除任何其他观察者等.
对于ARC,您需要在窗口打开时保留对窗口控件的强引用,然后在窗口关闭时将其删除.
为此,我在窗口上添加了一个用两种方法控制的类别:
pnl_addWindowController - 首次打开窗口时由窗口控制器调用pnl_removeWindowController - 来自 windowWillClose该类别维护一个全局NSMutableSet的活动窗口控制器.代码基本上只是[gWindowControllers addObject:self]和[gWindowControllers removeAllObjects]一些懒惰的NSMutableSet创建和一些锁定.