我有一个基于文档的Cocoa应用程序,它的子类NSDocument
作为MyDocument
。每个MyDocument
管理一个单独的后台进程(作为NSTask
)。我想确保NSTask
在其相应的MyDocument
关闭时或整个应用程序退出时终止。NSDocument子类,称为“关闭”方法两次
对于后者,我使文档观察NSApplicationWillTerminateNotification.
对于前者,我重写close
方法:
-(void)close {
// Cleanup code here
[super close];
}
(顺便说一句,我不能把清理代码在dealloc
方法,因为该项目是GC 。“d)
问题是这样的:如果我打开一个MyDocument
,使未保存的更改,然后按CMD-Q中,close
方法被称为两次。从调试器,调用链是: [MyDocument close]
电话[NSDocument close]
,这就要求[NSWindowController _windowDidClose]
,再次呼吁[MyDocument close]
。 (在该通话之后,应用程序退出)。
这是预期的行为?如果是这样,是否有更好的方式来发布文档特定的资源?或者我应该让close
安全地运行多次?
有趣。这种行为(不止一次接收'-close')似乎没有记录。我认为你建议让'-close'安全地运行多次是很好的选择。 – 2011-04-12 05:00:05
其实,你不是第一个想到的是:http://www.cocoabuilder.com/archive/cocoa/240166-nsdocument-close-method-calls-itself.html – 2011-04-12 05:12:09