La réponse de Graham Miln est très complète, il y a juste quelques notes que j'aimerais ajouter :
1) Une application peut prendre en charge Résiliation automatique o Cessation soudaine des activités ou même ambos . La différence entre les deux est la suivante : Avec la terminaison automatique, le système peut quitter l'application "à volonté", mais il la quittera "normalement" (comme si vous choisissiez la terminaison automatique). Quit <AppName>
de la <AppName>
), ce qui permet à l'application d'effectuer un certain travail lorsqu'elle est quittée, de sorte qu'elle puisse être restaurée dans cet état lorsqu'elle est rouverte. Avec l'arrêt brutal, le système peut "tuer" l'application "à volonté" sans que l'application n'ait la possibilité d'effectuer une quelconque action avant de mourir, puisqu'elle mourra instantanément, ce qui est beaucoup plus rapide.
2) Les applications peuvent prendre en charge l'une ou l'autre forme de résiliation sans le déclarer dans leur Info.plist
de sorte que le fichier grep
Le fait de ne pas répertorier une application ne signifie pas qu'elle ne prend pas en charge l'une ou l'autre des fonctionnalités. En fait, l'application Info.plist
ne modifie que le comportement par défaut d'une application. Le comportement par défaut est de ne prendre en charge ni l'un ni l'autre, à moins que le code n'active l'un ou l'autre explicitement. Lorsqu'elles sont déclarées dans leur Info.plist
le comportement est inverse : La fonctionnalité déclarée est activée par défaut, à moins que le code ne la désactive explicitement.
3) La raison pour laquelle ces fonctions sont contrôlées par le code est que seule l'application elle-même peut savoir si elle est réellement inactive ou si elle attend qu'un événement se produise et ne doit donc pas s'éteindre à ce moment-là. Une application peut donc temporairement désactiver les deux fonctions pendant qu'elle attend un événement ou qu'elle traite des données en interne, puis les réactiver une fois qu'elle a terminé.
4) Dans les deux cas, le système décide quand mettre fin à une application et quand ne pas le faire ("à volonté") et dans de nombreux cas, le système ne veut tout simplement pas le faire car il n'a aucune raison de le faire. Par exemple, si le système manque de mémoire, il cherchera agressivement des applications auxquelles il peut mettre fin afin de libérer rapidement de la mémoire pour celles qui continueront à fonctionner, mais tant qu'il n'y a pas de pénurie, quel avantage le système aurait-il à tuer ces applications ? La prochaine fois que vous les utiliserez, il suffira de les redémarrer, ce qui constitue une perte de temps de traitement alors qu'il n'y avait aucune raison de les quitter au départ. Le manque de mémoire n'est pas défini par la quantité de mémoire libre dont vous disposez (il n'y a pas de manque si toute la mémoire semble utilisée), mais par ce que l'on appelle la "pression de la mémoire". Moniteur d'activité peut vous indiquer la pression de mémoire de votre système. Ainsi, ce n'est pas parce qu'une application prend en charge l'une ou l'autre forme de résiliation que le système utilisera effectivement cette fonction.
5) Avec l'introduction des services XPC dans la version 10.8, certaines applications ont commencé à utiliser ces petits assistants pour effectuer leurs tâches de traitement. Les services XPC supportent implicitement la terminaison soudaine. Bien qu'ils appartiennent à une application, les services XPC n'affichent aucune interface utilisateur (et n'apparaissent pas dans le Dock), de sorte que vous ne remarquerez pas quand ils sont démarrés et quand ils se terminent. Cela signifie qu'au lieu que le système mette fin à l'application entière pour économiser des ressources, les applications gourmandes en ressources peuvent utiliser les services XPC et le système mettra fin à ces services XPC si nécessaire, ce qui rend souvent inutile que l'application elle-même prenne en charge l'une ou l'autre forme de terminaison, car mettre fin à l'application n'économisera pas beaucoup de ressources au système si l'utilisation principale des ressources est causée par les services XPC de l'application en question.