objective-c - 未收到 NSApplicationWillTerminateNotification

标签 objective-c cocoa macos appkit

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

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

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

谢谢。

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

最佳答案

发生这种情况的原因有多种。

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

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

一般来说,您不能指望收到终止通知,因为用户可能会强制退出。

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

关于objective-c - 未收到 NSApplicationWillTerminateNotification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1681832/

相关文章:

macos - osx - 获取当前桌面号的脚本

ios - 沿贝塞尔路径放置图像

objective-c - 如何以编程方式在 iOS 中按下 "dictate"键盘键(Objective-C)

cocoa - 获取桌面上图标的位置

objective-c - isKindOfClass 意外返回 NO

cocoa - "do"内的 NSFetchRequest 错误

objective-c - CocoaPods 错误 - 目标平台 `Pods` (OS X 10.6) 不兼容

iphone - 有什么方法可以检查实例是否仍在内存中?

c++ - 业务用C++,展示用Objective-C可以吗?

swift - 不要用 Xcode 8 复制 swift 库?