6

有谁知道exit(0)在 iOS 应用程序中是否已弃用?我知道手动终止应用程序不是一个好的决定,但是如果我们在代码中使用它,Apple 会禁止该应用程序吗?

4

3 回答 3

5

不,您不能调用 exit,因为您的应用程序应该被拒绝。这已被 Apple 反复劝阻,并且已知会导致 iOS 多任务切换出现严重错误。您应该让用户自己使用主页按钮。

http://developer.apple.com/library/ios/#qa/qa1561/_index.html

“此外,可能不会保存数据,因为 -applicationWillTerminate: 和类似的 UIApplicationDelegate 方法不会在您调用 exit 时被调用。如果在开发或测试期间需要终止您的应用程序,建议使用中止函数或断言宏。”

2012-04-09
更新以更强烈地阻止退出功能,并包括调试的最佳实践。

2008-08-27
新文档讨论了在代码中终止 iOS 应用程序的最佳实践。

直接来自 iOS 人机界面指南 http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/MobileHIG/UEBestPractices/UEBestPractices.html#//apple_ref/doc/uid/TP40006556-CH20-SW27

“不要以编程方式退出

永远不要以编程方式退出 iOS 应用程序,因为人们倾向于将其解释为崩溃。但是,如果外部环境阻止您的应用程序按预期运行,您需要告诉您的用户这种情况并解释他们可以做些什么。根据应用程序故障的严重程度,您有两种选择。

显示一个有吸引力的屏幕,描述问题并提出更正建议。屏幕会提供反馈,让用户确信您的应用没有任何问题。它让用户可以控制,让他们决定是否要采取纠正措施并继续使用您的应用程序,或者按下主页按钮并打开另一个应用程序

如果只有部分应用功能不可用,请在人们使用该功能时显示屏幕或提醒。仅当人们尝试访问不起作用的功能时才显示警报。

如有必要,显示许可协议或免责声明

如果您为您的 iOS 应用程序提供最终用户许可协议(或 EULA),App Store 会显示它,以便人们在获得您的应用程序之前可以阅读它。

如果可能,请避免要求用户在首次启动您的应用程序时表明他们同意您的 EULA。在没有显示协议的情况下,用户可以毫不拖延地享受您的应用程序。但是,即使这是首选的用户体验,也可能并非在所有情况下都可行。如果您必须在您的应用程序中显示许可协议,请以与您的用户界面协调一致的方式执行此操作,并将给用户造成的不便降至最低。

如果可能,请在您的应用说明或 EULA 中提供免责声明。用户随后可以在 App Store 中查看免责声明,您可以平衡业务需求和用户体验需求。”

于 2012-12-12T16:16:46.390 回答
5

不,Apple 不会拒绝您的应用使用exit(0).

你是对的,这不是一个很好的设计选择,但有时它可能很有用。

正如 Larme 所说,如果使用不当,可能会被视为崩溃,而崩溃将导致您的应用程序被拒绝。

applicationDidEnterBackground但是,当您(在有条件的情况下)您可能希望强制应用程序重新启动时,它可能非常有用。

于 2012-12-12T16:09:52.570 回答
5

我有一个应用程序由于退出方式(通过 UIAlertView)而被拒绝,exit(5) 当用户单击正确的按钮时执行此操作。

我收到了:

我们发现您的应用包含一个用于退出应用的 UI 控件。这不符合 App Store 审查指南所要求的 iOS 人机界面指南。

请参阅随附的屏幕截图以供参考。

iOS 人机界面指南指定,

“随时准备停止当人们按下 Home 按钮打开不同的应用程序或使用设备功能(例如手机)时,iOS 应用程序会停止。特别是,人们不会点击应用程序关闭按钮或从菜单中选择退出。为了提供良好的停止体验,iOS 应用程序应该:

  • 尽快并尽可能多地保存用户数据,因为退出或终止通知可能随时到达。

  • 停止时保存当前状态,尽可能详细地保存,以便人们在再次启动应用程序时不会丢失上下文。例如,如果您的应用显示滚动数据,请保存当前滚动位置。”

删除任何退出应用程序的机制是合适的。

“隐藏”退出可以理解为用户崩溃,不是吗?

于 2012-12-12T16:14:50.757 回答