cocoa - OS X 设计决策。在最后一个窗口关闭时终止应用程序?

标签 cocoa macos user-interface

与 Windows、GNOME 和大多数其他 GUI 不同,如果 OS X 应用程序的主窗口(或所有窗口)关闭,则该应用程序不会全部终止。

例如,启动 Firefox、Safari、Word 或大多数基于文档的应用程序。单击角落中的红点或输入 cmdW 关闭窗口。您可以看到该程序的菜单仍然处于事件状态,并且该程序仍在运行。对于 OS X 新手,有时您会看到数十个无窗口僵尸正在运行,他们想知道为什么他们的计算机变得越来越慢。

对于某些基于文档的程序,如果应用程序没有窗口,则不终止应用程序是有一定意义的。例如,使用 Safari 或 Word,您仍然可以键入 CmdN 并获得一个新文档窗口,以执行该应用程序设计的任何操作:浏览网页 (Safari) 或输入一个新文档(Word)。

苹果在这方面混合了他们的设计理念。有些在最后一个窗口关闭时关闭,有些则不关闭。第三方应用程序的情况更加复杂。

还有其他应用程序在单击红色关闭按钮时会关闭。当唯一或最后一个窗口关闭时,系统偏好设置、词典、Mac App Store、iPhoto 和计算器都会终止。 iCal、地址簿、iTunes、DVD 播放器不会终止。

我觉得特别烦人的是那些没有逻辑“新建文档”或“打开”功能的应用程序,但在关闭文档窗口时它们不会终止。示例:启动 iTunes 或地址簿并终止主窗口。那里坐着一个僵尸,没有 window ,除了手动选择“退出”之外没有任何功能。

最后一个窗口关闭后关闭应用程序很容易。 Cocoa 甚至会向您发送该事件的通知。只需将其添加到您的应用程序委托(delegate)中即可:

  - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
{
    return YES;
}

我的问题是:在最后一个窗口关闭后,我是否有任何理由不应该终止我的应用程序?为什么 OS X 软件上的变化如此之大?除非应用程序有"new"或“打开”或其他一些明确理解的原因在没有打开窗口的情况下不终止,否则终止失败对我来说似乎是一个错误。

最佳答案

根据 Apple 的 Human Interface Guidelines (Mac 开发者指南):

In most cases, applications that are not document-based should quit when the main window is closed. For Example, System Preferences quits if the user closes the window. If an application continues to perform some function when the main window is closed, however, it may be appropriate to leave it running when the main window is closed. For example, iTunes continues to play when the user closes the main window.

关于cocoa - OS X 设计决策。在最后一个窗口关闭时终止应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5480114/

相关文章:

macos - 无法在 MacOS 上删除旧版本的 ChromeDriver

c# - 在 C# 中有类似 Python 的 getattr() 的东西吗?

objective-c - 为什么不调用dealloc?

ios - 以秒为单位的 UTC 到本地时间

xcode - Mavericks 和 XCode 5 下 Sparkle 的 OS X 应用程序更新问题

java - 如何从 Swing Gui 访问同步缓冲区?

ios - 如何使搜索栏在表格 View 中滚动时不消失?

objective-c - 无法设置 NSOpenGLContext 的 View

python - 如何使用 pyPDF2 反转多个 PDF 文件的顺序?

ios - 根据 Swift 中的参数返回不同类型的数据