Cocoa OSX设计决策。在上次窗口关闭时终止应用程序?

Cocoa OSX设计决策。在上次窗口关闭时终止应用程序?,cocoa,macos,user-interface,Cocoa,Macos,User Interface,与Windows、GNOME和大多数其他GUI不同,如果应用程序的主窗口(或所有窗口)关闭,OSX应用程序不会全部终止 例如,启动Firefox、Safari、Word或大多数基于文档的应用程序。单击角落中的红点或键入cmdW关闭窗口。您可以看到该程序的菜单仍处于活动状态,并且该程序仍在运行。对于OSX新手,有时你会看到几十个这样的无窗口僵尸在运行,他们想知道为什么他们的计算机变得越来越慢 对于某些基于文档的程序,如果应用程序没有窗口,则不终止应用程序是有一定意义的。例如,使用Safari或Wo

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

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

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

苹果在这一点上融入了他们的设计理念。有些在最后一个窗口关闭时关闭,有些则不关闭。第三方应用程序甚至更为复杂

单击红色关闭按钮时,其他应用也会关闭。系统首选项、字典、Mac应用商店、iPhoto和计算器在唯一或最后一个窗口关闭时终止。iCal、通讯簿、iTunes、DVD播放器不终止

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

在最后一个窗口关闭后,很容易关闭应用程序。Cocoa甚至会通知您该事件。只需将此项添加到您的应用程序委托中:

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

我的问题是:是否有任何理由我不应该在最后一个窗口关闭后终止我的申请?为什么OSX软件上的变量如此之大?除非应用程序有一个“新的”或“打开的”或其他明确理解的原因,不在没有打开窗口的情况下终止,否则终止失败对我来说就像一个bug

可以从“窗口”菜单重新打开iTunes主窗口。Mail.app也有类似的行为。我想不出任何应用程序在最后一个窗口关闭时会关闭,因此我不认为你的应用程序应该以这种方式运行(事实上,我很惊讶它不在苹果的用户体验指南中,这真的会让我烦恼!)


您希望关闭iTunes主窗口但保持应用程序打开的原因之一是能够将应用程序用作第三方脚本/应用程序的服务器。我很少使用iTunes主界面,而是通过第三方应用程序控制我的音乐。我还为我启动的其他应用程序编写应用程序描述,而不是与该应用程序的界面交互。

一般来说,在最后一个窗口关闭时,永远不要关闭基于文档的应用程序。用户希望能够在不重新启动应用程序的情况下打开一个新文档,如果不能打开,则会使他们感到困惑

对于基于非文档的应用程序,您需要考虑以下几个方面:

  • 我的申请需要多长时间才能打开?如果超过一秒钟,你可能不应该退出
  • 我的应用程序是否需要一个有用的窗口?如果应用程序可以在没有windows的情况下工作,则不应退出

  • iTunes不会退出,因为正如Anne提到的,你不需要一个窗口来播放音乐(问题2)。它也不是基于Cocoa的,因此在最后一个窗口之后关闭要困难得多,特别是因为它允许您打开特定播放列表的窗口,因此可能打开的窗口数量是无限的

    在我看来,地址簿不需要一直打开。这可能是旧版本OS X遗留下来的设计决定,也可能是苹果公司的某个人认为最好还是让它保持打开状态(也许这样你就可以添加联系人?)。iTunes和通讯录都通过窗口菜单以及键盘快捷键(iTunes为Option+Command+1,通讯录为Command+0)提供了访问主界面的功能。

    每个苹果(Mac开发者指南):

    在大多数情况下,应用程序 如果不基于文档,则应在 主窗口已关闭。对于 例如,如果 用户关闭窗口。如果 应用程序继续执行一些操作 主窗口打开时的函数 但是,关闭可能是适当的 让它在主电源关闭时继续运行 窗户关上了。例如,iTunes 当用户关闭时继续播放 主窗口


    你为什么说‘他们想知道为什么他们的电脑越来越慢’?一个非活动的应用程序没有使用任何资源。请注意:想要运行iTunes windowless是有充分理由的,我希望您理解它是什么。不过,通讯簿很奇怪。@Carl Norum:“一个不活动的应用程序没有使用任何资源”,这对我来说是个新闻。启动一系列程序,包括终端。在终端中,键入
    top
    确定看起来这些程序正在使用我的资源!如果我终止一些程序——甚至是那些已经好几天没有活动的程序——肯定会加快速度。当我输入这个时,Photoshop在背景中。我已经好几天没有打开或激活文档了。它使用5%的CPU和233MB的驻留内存。将其乘以10个程序,这会对性能产生显著影响。卡尔:当我把Safari打开一段时间,有很多窗口时,我可以关闭所有的窗口,但它仍然会让我的mac电脑迟钝。Safari有时会在没有窗户打开的情况下吃掉500MB或更多。在我真正关闭Safari之前,这肯定会留下明显的缓慢,此时我的内存“使用率”会难以置信地下降。@drewk/chris-可以说是“非活动”程序对资源的使用