2

我有一些代码需要在应用程序终止时运行。我为 NSApplicationWillTerminateNotification 注册我的控制器,如下所示:

[[NSNotificationCenter defaultCenter] 
    addObserver: self
       selector: @selector(applicationWillTerminate:)
           name: NSApplicationWillTerminateNotification
         object: nil];

现在,如果我启动我的应用程序并在前 20 秒左右退出它, applicationWillTerminate就会被调用。如果我稍后退出应用程序,它不会。我的应用程序中的什么可能导致这种行为?我还尝试将我的控制器设置为 NSApplication 的委托,结果相同。有任何想法吗?

谢谢。

哦,这是 XCode 3.2,Snow Leopard 10.6.1,使用 10.5 SDK。发生在调试和发布版本中。

4

1 回答 1

6

发生这种情况有几个原因。

如果您正在运行 GC,您的观察者是否在终止发生之前被收集并最终确定?(我应该对此进行测试并提交一个错误,如果它至少需要记录的话)

您的应用程序是静默崩溃还是直接调用 exit()?

通常,您不能指望收到终止通知,因为用户可能会为此而强制退出。

此外,在 Snow Leopard 中,有一个称为突然终止的功能,它允许您的应用程序让系统知道杀死应用程序是安全的,而不是通过正常的终止 rigamarole。它记录在NSProcessInfo文档中。

于 2009-11-05T16:52:23.517 回答