Надлежащий способ выйти из приложения для iPhone?

269
задан TheNeil 17 April 2019 в 06:50
поделиться

11 ответов

Вы попробовали exit(0)?

, С другой стороны [[NSThread mainThread] exit], хотя я не попробовал это, это походит на более соответствующее решение.

216
ответ дан Sophie Alpert 23 November 2019 в 02:19
поделиться

В дополнение к вышеупомянутому, хорошему, отвечают, что я просто хотел добавить, думайте о чистке Вашей памяти.

После Ваших выходов приложения, iPhone OS автоматически очистит что-либо, что Ваше оставленное позади приложение, таким образом освобождая всю память вручную может просто увеличить количество времени, из которого это берет Ваше приложение для выхода.

2
ответ дан Chris Jefferson 23 November 2019 в 02:19
поделиться

Гм, Вам, вероятно, 'придется' выйти из приложения, если, скажем, Ваше приложение требует интернет-соединения. Вы могли отобразить предупреждение и затем сделать что-то вроде этого:

if ([[UIApplication sharedApplication] respondsToSelector:@selector(terminate)]) {
    [[UIApplication sharedApplication] performSelector:@selector(terminate)];
} else {
    kill(getpid(), SIGINT); 
}
2
ответ дан Rob 23 November 2019 в 02:19
поделиться

На iPhone нет никакого понятия выхода из приложения. Единственное действие, которое должно заставить приложение выходить, касается кнопки "Домой" по телефону, и это не что-то, к чему у разработчиков есть доступ.

По данным Apple, Ваше приложение не должно завершаться самостоятельно. Так как пользователь не нажимал кнопку "Домой", любой возврат к главному экрану производит пользователю впечатление что Ваше разрушенное приложение. Это - запутывающее, нестандартное поведение и должно избежаться.

271
ответ дан August 23 November 2019 в 02:19
поделиться

В iPadOS 13 можно теперь закрыть все сеансы сцены как это:

for session in UIApplication.shared.openSessions {
    UIApplication.shared.requestSceneSessionDestruction(session, options: nil, errorHandler: nil)
}

Это будет звонить applicationWillTerminate(_ application: UIApplication) на Вашем приложении, делегируют и завершают приложение в конце.

, Но остерегаются двух вещей:

[еще 1112] информация о сценах в iOS/iPadOS 13: https://developer.apple.com/documentation/uikit/app_and_environment/scenes

0
ответ дан 23 November 2019 в 02:19
поделиться

В построителе интерфейса свяжите класс tableview с вашим настраиваемым табличным представлением в вид инспектора удостоверений

13
ответ дан 23 November 2019 в 02:19
поделиться

На самом деле это не способ выйти из программы, а способ заставить людей выйти.

UIAlertView *anAlert = [[UIAlertView alloc] initWithTitle:@"Hit Home Button to Exit" message:@"Tell em why they're quiting" delegate:self cancelButtonTitle:nil otherButtonTitles:nil];
[anAlert show];
39
ответ дан 23 November 2019 в 02:19
поделиться
[[UIApplication sharedApplication] terminateWithSuccess];

Он работал нормально и автоматически вызывает

- (void)applicationWillTerminateUIApplication *)application delegate.

для удаления предупреждения о времени компиляции. Добавьте этот код

@interface UIApplication(MyExtras)
  - (void)terminateWithSuccess;
@end 
1
ответ дан 23 November 2019 в 02:19
поделиться

Мое приложение недавно было отклонено, т.к. я использовал недокументированный метод. Буквально:

«К сожалению, его нельзя добавить в App Store, потому что он использует частный API. Использование закрытых API, как указано в разделе 3.3.1 лицензионного соглашения программы разработчика iPhone, запрещено:

«3.3.1 Приложения могут использовать только Документированные API в порядке, предписанном Apple, и не должны использовать или вызывать какие-либо частные API.»

Непубличный API, который включен в ваше приложение, - terminateWithSuccess »

6
ответ дан 23 November 2019 в 02:19
поделиться

Посмотрите вопросы и ответы здесь: https://developer.apple.com/library/content/qa/qa1561/_index.html

Вопрос: Как программно завершить работу приложения iOS?

Не существует API для изящного завершения работы приложения iOS.

В iOS пользователь нажимает кнопку Home, чтобы закрыть приложения. Если в вашем приложении возникнут условия, при которых оно не сможет выполнять предусмотренные функции, рекомендуемый подход заключается в отображении предупреждения для пользователя, указывающего на характер проблемы и возможные действия, которые пользователь может предпринять - включение WiFi, включение служб местоположения и т.д. Дайте пользователю возможность завершить работу приложения по своему усмотрению.

ВНИМАНИЕ: Не вызывайте функцию exit. Приложения, вызывающие exit, будут казаться пользователю аварийными, вместо того чтобы выполнить изящное завершение и вернуться на главный экран.

Кроме того, данные могут быть не сохранены, поскольку -applicationWillTerminate: и подобные UIApplicationDelegate методы не будут вызваны при вызове exit.

Если во время разработки или тестирования необходимо завершить работу приложения, рекомендуется использовать функцию abort или макрос assert

40
ответ дан 23 November 2019 в 02:19
поделиться

Ваш ApplicationDelegate получает уведомление о намеренном выходе пользователя:

- (void)applicationWillResignActive:(UIApplication *)application {

Когда я получаю это уведомление, я просто звоню

        exit(0);

, который выполняет всю работу. И что самое лучшее, это намерение пользователя бросить курить, поэтому не должно возникнуть проблем с его вызовом.

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

Вместо этого я установил флаг, чтобы ДЕЙСТВИТЕЛЬНО закрыть приложение при следующем фоновом действии. Это нормально для обновления приложения после синхронизации.

8
ответ дан 23 November 2019 в 02:19
поделиться