-applicationShouldTerminate:
在您的 NSApplication 委托中使用是正确的做法。
但是,对于在 Mac OS X 10.6 及更高版本上构建的应用程序,您可能会遇到一个名为“突然终止”的功能。在Foundation Release Notes中对其进行了非常直接的描述。
结果是您的后台任务应该防止突然终止:
- (void)longRunningTask {
NSProcessInfo *processInfo = [NSProcessInfo processInfo];
[processInfo disableSuddenTermination];
// real task work
[processInfo enableSuddenTermination];
}
这样,-terminate:
当您要求它在忙碌时退出时,您的应用程序将被适当地发送,这将反过来调用您的 NSApplication 委托-applicationShouldTerminate:
,这将允许您优雅地停止您的任务或要求用户取消它们。
如果您在 NSOperation 或其子类中执行长时间运行的任务,最好只是一般地添加此支持而不是将其单独添加到所有任务中。(无论您的任务如何停止,无论它是完成还是被取消,都不要忘记重新启用突然终止。)