我有一个基于文档的 Cocoa 应用程序,它的子类NSDocument
为MyDocument
. 每个都MyDocument
管理一个单独的后台进程(作为NSTask
)。我想确保它在相应的关闭或整个应用程序退出时NSTask
终止。MyDocument
对于后者,我让文档遵守NSApplicationWillTerminateNotification.
对于前者,我覆盖了close
方法:
-(void)close {
// Cleanup code here
[super close];
}
(顺便说一句,我不能在dealloc
方法中放入清理代码,因为项目是 GC 的。)
问题是这样的:如果我打开 a MyDocument
,进行未保存的更改,然后按 cmd-Q,该close
方法会被调用两次。从调试器来看,调用链是:
[MyDocument close]
调用[NSDocument close]
,调用[NSWindowController _windowDidClose]
,[MyDocument close]
再调用。(在那次调用之后,应用程序退出)。
这是预期的行为吗?如果是这样,是否有更好的方法来释放特定于文档的资源?还是我应该确保close
安全运行多次?