Вы попробовали exit(0)
?
, С другой стороны [[NSThread mainThread] exit]
, хотя я не попробовал это, это походит на более соответствующее решение.
В дополнение к вышеупомянутому, хорошему, отвечают, что я просто хотел добавить, думайте о чистке Вашей памяти.
После Ваших выходов приложения, iPhone OS автоматически очистит что-либо, что Ваше оставленное позади приложение, таким образом освобождая всю память вручную может просто увеличить количество времени, из которого это берет Ваше приложение для выхода.
Гм, Вам, вероятно, 'придется' выйти из приложения, если, скажем, Ваше приложение требует интернет-соединения. Вы могли отобразить предупреждение и затем сделать что-то вроде этого:
if ([[UIApplication sharedApplication] respondsToSelector:@selector(terminate)]) {
[[UIApplication sharedApplication] performSelector:@selector(terminate)];
} else {
kill(getpid(), SIGINT);
}
На iPhone нет никакого понятия выхода из приложения. Единственное действие, которое должно заставить приложение выходить, касается кнопки "Домой" по телефону, и это не что-то, к чему у разработчиков есть доступ.
По данным Apple, Ваше приложение не должно завершаться самостоятельно. Так как пользователь не нажимал кнопку "Домой", любой возврат к главному экрану производит пользователю впечатление что Ваше разрушенное приложение. Это - запутывающее, нестандартное поведение и должно избежаться.
В iPadOS 13 можно теперь закрыть все сеансы сцены как это:
for session in UIApplication.shared.openSessions {
UIApplication.shared.requestSceneSessionDestruction(session, options: nil, errorHandler: nil)
}
Это будет звонить applicationWillTerminate(_ application: UIApplication)
на Вашем приложении, делегируют и завершают приложение в конце.
, Но остерегаются двух вещей:
Это, конечно, не предназначено, чтобы использоваться для закрытия весь сцены. (см. https://developer.apple.com/design/human-interface-guidelines/ios/system-capabilities/multiple-windows / )
Он компилирует и хорошо работает на iOS 13 на iPhone, но, кажется, ничего не делает.
В построителе интерфейса свяжите класс tableview с вашим настраиваемым табличным представлением в вид инспектора удостоверений
На самом деле это не способ выйти из программы, а способ заставить людей выйти.
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];
[[UIApplication sharedApplication] terminateWithSuccess];
Он работал нормально и автоматически вызывает
- (void)applicationWillTerminateUIApplication *)application delegate.
для удаления предупреждения о времени компиляции. Добавьте этот код
@interface UIApplication(MyExtras)
- (void)terminateWithSuccess;
@end
Мое приложение недавно было отклонено, т.к. я использовал недокументированный метод. Буквально:
«К сожалению, его нельзя добавить в App Store, потому что он использует частный API. Использование закрытых API, как указано в разделе 3.3.1 лицензионного соглашения программы разработчика iPhone, запрещено:
«3.3.1 Приложения могут использовать только Документированные API в порядке, предписанном Apple, и не должны использовать или вызывать какие-либо частные API.»
Непубличный API, который включен в ваше приложение, - terminateWithSuccess »
Посмотрите вопросы и ответы здесь: https://developer.apple.com/library/content/qa/qa1561/_index.html
Вопрос: Как программно завершить работу приложения iOS?
Не существует API для изящного завершения работы приложения iOS.
В iOS пользователь нажимает кнопку Home, чтобы закрыть приложения. Если в вашем приложении возникнут условия, при которых оно не сможет выполнять предусмотренные функции, рекомендуемый подход заключается в отображении предупреждения для пользователя, указывающего на характер проблемы и возможные действия, которые пользователь может предпринять - включение WiFi, включение служб местоположения и т.д. Дайте пользователю возможность завершить работу приложения по своему усмотрению.
ВНИМАНИЕ: Не вызывайте функцию
exit
. Приложения, вызывающиеexit
, будут казаться пользователю аварийными, вместо того чтобы выполнить изящное завершение и вернуться на главный экран.Кроме того, данные могут быть не сохранены, поскольку
-applicationWillTerminate:
и подобныеUIApplicationDelegate
методы не будут вызваны при вызове exit.Если во время разработки или тестирования необходимо завершить работу приложения, рекомендуется использовать функцию
abort
или макросassert
Ваш ApplicationDelegate получает уведомление о намеренном выходе пользователя:
- (void)applicationWillResignActive:(UIApplication *)application {
Когда я получаю это уведомление, я просто звоню
exit(0);
, который выполняет всю работу. И что самое лучшее, это намерение пользователя бросить курить, поэтому не должно возникнуть проблем с его вызовом.
В моем аудио-приложении было необходимо закрыть приложение после того, как люди синхронизировали свое устройство, пока играла музыка. Как только синхронизация завершится, я получаю уведомление. Но выход из приложения сразу после этого на самом деле будет выглядеть как сбой.
Вместо этого я установил флаг, чтобы ДЕЙСТВИТЕЛЬНО закрыть приложение при следующем фоновом действии. Это нормально для обновления приложения после синхронизации.