我有一个基于文档的 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安全运行多次?