La risposta di Graham Miln è molto completa, ci sono solo alcune note che vorrei aggiungere:
1) Un'app può supportare Terminazione automatica o Terminazione improvvisa o persino entrambi . La differenza tra questi due è: Con la terminazione automatica il sistema può uscire dall'app "a piacimento" ma lo interromperà "normalmente" (proprio come se scegli Quit <AppName>
dal menu <AppName>
), consentendo all'app di eseguire alcuni lavori su smettere, quindi può essere ripristinato in quello stato quando viene riaperto. Con Sudden Termination, il sistema può "uccidere" l'app "a piacimento" senza alcuna possibilità che l'app esegua azioni prima di morire, poiché morirà immediatamente, il che è molto più veloce.
2) Le app possono supportare entrambe le forme di terminazione senza dichiararle nel loro file Info.plist
, quindi grep
non sta elencando un'app non significa che l'app non supporterà nessuna delle due funzioni. In realtà, la voce Info.plist
modifica solo il comportamento predefinito di un'app. Il comportamento predefinito è di non supportare nessuno, a meno che il codice non ne abiliti uno in modo esplicito. Se dichiarato nel file Info.plist
, il comportamento è il contrario: la funzionalità dichiarata è abilitata per impostazione predefinita, a meno che il codice non la disabiliti esplicitamente.
3) Il motivo per il controllo di queste funzionalità nel codice è che solo l'app stessa può sapere se è attualmente realmente inattiva o in realtà in attesa di qualche evento e quindi non deve morire al momento. Pertanto, un'app può temporaneamente disattivare entrambe le parti in attesa che accada qualcosa o elaborare alcuni dati internamente e quindi riattivarli una volta terminato.
4) In entrambi i casi, il sistema decide quando terminare un'app e quando non lo fa ("a volontà") e in molti casi il sistema semplicemente non lo desidera in quanto non ha motivo di farlo. Per esempio. se il sistema esaurisce la memoria, cercherà in modo aggressivo le app che può terminare per liberare rapidamente la memoria per quelle che devono continuare a funzionare, ma finché non c'è carenza, quale vantaggio avrebbe il sistema per uccidere queste app ? La prossima volta che li usi, devono essere riavviati, il che è uno spreco di tempo di elaborazione quando non c'erano motivi per chiuderli in primo luogo. E la mancanza di memoria non è definita dalla quantità di memoria libera che hai (non c'è carenza solo perché tutta la memoria sembra in uso) ma dalla cosiddetta "pressione della memoria". Monitoraggio attività può mostrare la pressione della memoria del tuo sistema. Quindi, solo perché un'app supporta entrambe le forme di terminazione, non è detto che il sistema utilizzerà effettivamente tale funzionalità.
5) Con l'introduzione dei servizi XPC in 10.8, alcune app hanno iniziato a utilizzare questi piccoli helper per eseguire le loro attività di elaborazione. I servizi XPC supportano implicitamente la risoluzione improvvisa. Nonostante appartengano a un'app, i servizi XPC non visualizzano alcuna interfaccia utente (e non vengono visualizzati nel Dock), quindi non si noterà quando vengono avviati e quando vengono interrotti. Ciò significa che, invece di avere il sistema che interrompe l'intera app per risparmiare risorse, le app con risorse intense possono utilizzare XPC Services e il sistema interromperà questi servizi XPC, se necessario, il che rende spesso inutile per l'app stessa supportare una delle due modalità di terminazione. l'applicazione ora non salverà molte risorse del sistema se l'utilizzo delle risorse principali è causato dai servizi XPC di tale applicazione.