未收到NSApplicationWillTerminateNotification

时间:2009-11-05 16:36:10

标签: objective-c cocoa macos appkit

我有一些代码需要在应用程序终止时运行。我为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。在Debug和Release版本中都会发生。

1 个答案:

答案 0 :(得分:5)

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

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

您的应用是否会直接崩溃或直接调用exit()?

一般情况下,您不能指望收到的终止通知,因为用户可能会强制退出它。

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