未收到NSApplicationWillTerminateNotification

svi*_*tus 1 macos cocoa objective-c appkit

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

[[NSNotificationCenter defaultCenter] 
    addObserver: self
       selector: @selector(applicationWillTerminate:)
           name: NSApplicationWillTerminateNotification
         object: nil];
Run Code Online (Sandbox Code Playgroud)

现在,如果我启动我的应用程序并在前20秒内退出它, applicationWillTerminate就会被调用.如果我稍后退出该应用程序,则不会.我的应用程序中可能会导致此行为?我还试图将我的控制器设置为NSApplication的委托,但结果相同.有任何想法吗?

谢谢.

哦,这是XCode 3.2,Snow Leopard 10.6.1,使用10.5 SDK.在Debug和Release版本中都会发生.

bbu*_*bum 5

有几个原因可能会发生这种情况.

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

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

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

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