正确的退出iPhone应用程序的方法是什么?

292

我正在编写一个iPhone应用程序,并且需要由于某些用户操作强制退出它。在清理了应用程序分配的内存后,调用哪种适当的方法来终止应用程序?

答案:

在清理了应用程序分配的内存之后,可以使用exit(0)方法来终止应用程序。


35
唯一正确的方式是——使用主页按钮。 - beryllium
5
我能想象到唯一一个可能会让人考虑以编程方式退出的情况是以下场景:应用程序启动,显示使用条款,拒绝接受后退出应用程序。这是一些品牌有时会向开发者施加压力要求做的事情。但这是错误的。 - Daniel
6
通常情况下,当您上传应用程序时,您需要在iTunes Connect上放置免责声明/使用条款(EULA)。如果用户下载您的应用程序,则意味着他们已接受您的EULA。 - Paul de Lange
9
有完全合理的原因需要强制退出iOS应用程序。我的情况是,我正在分发预发布的beta版本应用程序。beta版本开放了所有IAP免费使用,但这些功能有时间限制,需要在几周后过期。因此,我使用下面的方法在beta期结束后终止应用程序。我会在LIVE版本中删除这个功能。但是这个方法对我很有帮助,而且是正确的! - badweasel
6
如果一个应用是长时间后台运行的,且进入不再需要在后台运行的状态,这是退出应用的一个有效理由。例如,用户注销登录。这种情况下退出应用程序是有意义的,因为当下次启动应用程序时,它将开始一个干净的状态。这将作为一种安全措施,防止内存泄漏等问题发生。请注意,在这种情况下,应用程序将会退出“后台”,因此用户不会察觉到任何问题。 - frankodwyer
显示剩余4条评论
24个回答

0
用户应该决定何时退出应用程序。 我认为当应用程序退出时,这不是一个好的用户交互方式。因此,没有很好的API可用,只有主页按钮有一个。
如果出现错误:改进实现或通知用户。 如果必须重新启动:改进实现或通知用户。
听起来很愚蠢,但是在没有让用户决定并且未通知用户的情况下退出应用程序是一种不良做法。由于有一个用于用户交互的主页按钮,苹果公司指出,不应该有两个用于相同功能(退出应用程序)的事物。

0

Swift 4.2(或更早版本)

可以使用名为Darvin的库。

import Darwin

exit(0) // Here you go

NB: 这在 iOS 应用程序中不推荐使用。

这样做会获取到崩溃日志。


0

除了主页按钮之外,退出应用程序的方式真的不像 iOS。

不过,我做了这个助手,它不使用任何私有内容:

void crash()
{ [[NSMutableArray new] addObject:NSStringFromClass(nil)]; }

但在我的情况下仍不适用于生产。它是用来测试崩溃报告或在Core Data重置后快速重新启动的。只是确保它安全,以免被拒绝,如果该函数留在生产代码中。


0
在iPadOS 13中,您现在可以像这样关闭所有场景会话:
for session in UIApplication.shared.openSessions {
    UIApplication.shared.requestSceneSessionDestruction(session, options: nil, errorHandler: nil)
}

这将调用您的应用程序委托上的applicationWillTerminate(_ application: UIApplication)并最终终止应用程序。

但要注意两件事:

iOS/iPadOS 13中有关场景的更多信息:https://developer.apple.com/documentation/uikit/app_and_environment/scenes


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接