Может быть целесообразно выйти из приложения, если это долгоживущее приложение, которое также выполняется в фоновом режиме, например, для получения обновлений местоположения (для этого используется возможность обновления местоположения фона).
Например, предположим, что пользователь выходит из приложения, основанного на местоположении, и перемещает приложение в фоновый режим с помощью кнопки «Домой». В этом случае ваше приложение может продолжать работать, но может иметь смысл полностью выйти из него. Это было бы хорошо для пользователя (освобождает память и другие ресурсы, которые не нужно использовать), и хорошо для стабильности приложения (т. Е. Обеспечение периодического перезапуска приложения, когда это возможно, является защитной сетью от утечек памяти и других недостатков памяти вопросы).
Это может (хотя, вероятно, не следует, см. Ниже :-) быть достигнуто с чем-то вроде:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
if (/* logged out */) {
exit(0);
} else {
// normal handling.
}
}
Поскольку приложение затем выйдет из фона , оно не будет выглядеть неправильно для пользователя и не будет напоминать сбой, если пользовательский интерфейс будет восстановлен при следующем запуске приложения. Другими словами, для пользователя это не будет отличаться от инициированного системой завершения приложения, когда приложение находится в фоновом режиме.
Тем не менее, было бы предпочтительнее использовать более стандартный подход, чтобы система знала, что приложение может быть остановлено. Например, в этом случае, убедившись, что GPS не используется, прекратив запрашивать обновления местоположения, включая отключение показа текущего местоположения на виде карты, если таковой имеется. Таким образом, система позаботится о прекращении работы приложения через несколько минут (т. Е. [[UIApplication sharedApplication] backgroundTimeRemaining]
) после того, как приложение войдет в фоновый режим. Это дало бы все те же преимущества без использования кода для завершения работы приложения.
- (void)applicationDidEnterBackground:(UIApplication *)application
{
if (/* logged out */) {
// stop requesting location updates if not already done so
// tidy up as app will soon be terminated (run a background task using beginBackgroundTaskWithExpirationHandler if needed).
} else {
// normal handling.
}
}
И, конечно же, использование exit(0)
никогда не будет подходящим для среднего производственного приложения, которое работает на переднем плане, согласно другим ответам, которые ссылаются на http://developer.apple.com/iphone/library/qa/qa2008/qa1561.html