我有一些代码需要在应用程序终止时运行。我为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版本中都会发生。
答案 0 :(得分:5)
有几个原因导致这种情况发生。
如果您正在运行GC'd,您的观察者是否会在终止发生之前收集并最终确定? (我应该对此进行测试并提交一个bug,如果它确实存在,至少需要记录)
您的应用是否会直接崩溃或直接调用exit()?
一般情况下,您不能指望收到的终止通知,因为用户可能会强制退出它。
此外,在Snow Leopard中,有一项称为突然终止的功能,允许您的应用让系统知道杀死应用程序是安全的,而不是通过正常终止的rigamarole。它记录在NSProcessInfo文档中。