Подтвердить что ты не робот

OS X проектные решения. Завершить приложение при закрытии последнего окна?

В отличие от Windows, GNOME и большинства других графических интерфейсов, прикладные программы OS X не все завершаются, если основное окно (или все окна) этого приложения закрыты.

Например, запустите Firefox, Safari, Word или большинство приложений на основе документов. Либо нажмите красную точку в углу, либо введите cmd W, чтобы закрыть окно. Вы можете видеть, что меню этой программы все еще активно, и программа все еще работает. С новичками OS X вы иногда увидите десятки этих беззонных зомби, и они задаются вопросом, почему их компьютер становится медленнее.

В некоторых программах на основе документов есть смысл не прекращать приложение, если у него нет окон. Например, с Safari или Word вы все равно можете ввести cmd N и получить новое окно документа для того, что было предназначено для этого приложения: просмотреть веб-сайт (Safari) или ввести новый документ (Word).

Apple смешана с их философией дизайна. Некоторые закрываются в последнем окне, а некоторые нет. Сторонние приложения еще более неоднозначны.

Есть другие приложения, которые закрываются, когда их красная кнопка закрытия нажата. Системные настройки, словарь, Mac App Store, iPhoto и калькулятор прекращаются, когда закрывается единственное или последнее окно. iCal, адресная книга, iTunes, проигрыватель DVD не завершаются.

То, что я нахожу особенно раздражающим, - это приложения, у которых нет логической функции "Новый документ" или "Открыть", но они не завершаются, когда окно документа закрыто. Пример: запустите iTunes или адресную книгу и завершите основное окно. Там сидит зомби без окна и нет никакой функции, кроме ручного выбора "Выход".

Закройте приложение после закрытия последнего окна. Cocoa даже дает вам уведомление об этом событии. Просто добавьте это в свой делегат приложения:

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

Мой вопрос таков: есть ли причина, по которой я не должен прекращать свое приложение после закрытия последнего окна? Почему это так переменно в программном обеспечении OS X? Если у приложения нет "новой" или "открытой" или какой-либо другой четко понимаемой причины, чтобы не заканчиваться без открытия окна, отказ от завершения кажется мне ошибкой.

4b9b3361

Ответ 1

В Apple Руководства по человеческому интерфейсу (руководство для разработчиков Mac):

В большинстве случаев приложения, которые не основанные на документах, должны прекратиться, когда главное окно закрыто. Для Пример. Системные настройки завершаются, если пользователь закрывает окно. Если приложение продолжает выполнять некоторые когда основное окно закрыто, однако это может быть чтобы он не работал, когда основной окно закрыто. Например, информационные технологии продолжает играть, когда пользователь закрывает главное окно.

Ответ 2

В общем, никогда не закрывайте приложение на основе документа, когда последнее окно закрывается. Пользователь будет ожидать, что сможет открыть новый документ без повторного запуска приложения, и он будет путать их, если они не могут.

Для приложений, не содержащих документа, вам нужно рассмотреть несколько вещей:

  • Сколько времени требуется для открытия моего приложения? Если это занимает больше секунды, вы, вероятно, не должны уходить.
  • Нужно ли моему приложению, чтобы окно было полезным? Если ваше приложение может работать без окон, вы не должны уходить.

iTunes не уходит, потому что, как сказала Энн, вам не нужно окно для воспроизведения музыки (вопрос 2). Он также не основан на Cocoa, поэтому его закрыть гораздо сложнее после последнего окна, тем более что он позволяет открывать окна для определенных плейлистов, поэтому существует неограниченное число возможных окон.

На мой взгляд, адресная книга не должна оставаться открытой. Это может быть решение с более старым дизайном из более ранних версий OS X, или может быть, что кто-то из Apple просто подумал, что лучше оставить его открытым (возможно, вы можете добавить контакт?). Как iTunes, так и адресная книга обеспечивают доступ к их основным интерфейсам через меню Window, а также сочетание клавиш (Option + Command + 1 для iTunes, Command + 0 для адресной книги).

Ответ 3

Главное окно iTunes можно открыть из меню "Окно". Аналогичное поведение имеет Mail.app. Я не могу придумать какие-либо приложения, которые закрываются, когда закрывается последнее окно, и поэтому я не думаю, что есть веская причина, по которой ваше приложение должно вести себя таким образом (на самом деле, я удивляюсь, что он не работает в Apple рекомендации, это меня действительно беспокоило бы!).

Одна из причин, почему вы хотите закрыть, например. главное окно iTunes, но приложение открыто, чтобы иметь возможность использовать приложение в качестве своего рода сервера для сторонних скриптов/приложений. Я редко использую основной интерфейс iTunes, но вместо этого контролирую свою музыку с помощью стороннего приложения. Я также пишу AppleScripts для других приложений, которые я запускаю вместо взаимодействия с этим интерфейсом приложения.