【问题标题】:Can I proactively close my iOS app?我可以主动关闭我的 iOS 应用程序吗?
【发布时间】:2010-08-26 01:03:53
【问题描述】:

在一些罕见的数据损坏情况下,我不想在同一会话中尝试恢复,而是想执行一些修复,然后关闭应用程序,以便下次启动时安全。

没有像*(unsigned int *)0 = 0xDEADBEEF 这样的愚蠢的东西使应用程序崩溃,我在 Cocoa 中找不到导致正常关闭的 API。

更新:找到有关该主题的文档,这基本上证实了怀疑并指出 exit 作为最后的选择:

http://developer.apple.com/iphone/library/qa/qa2008/qa1561.html

【问题讨论】:

    标签: iphone ios shutdown


    【解决方案1】:
    exit(0);
    

    是的,它也适用于 iPhone。

    或者,

    [[UIApplication sharedApplication] terminate];
    

    【讨论】:

    • 很公平,虽然我希望有一些更简洁的东西,比如告诉 UIApplication 打破它的运行循环。
    • 好吧,用“强制”之类的词。无论哪种方式,它都比死食物或坏食物好。
    • -terminate 不是 UIApplication 上已发布的方法,所以我会避开。 exit(0) 由此处的文档验证:developer.apple.com/iphone/library/documentation/uikit/…
    • 如果您不希望您的应用在应用商店中被接受(故事中没有越狱标签),这是一个很好的建议。风险自负,我们其他人感谢您减少了应用商店中的竞争。
    • [[UIApplication sharedApplication] 终止];没有terminate 选择器
    【解决方案2】:

    在调试 Debug 构建时,我更喜欢会崩溃到调试器中的东西,这样我不仅会知道原因,而且可以在必要时四处寻找更多细节。向任何非 nil 对象发送随机消息是 Objective C 执行此操作的一种方式。

    [ UIApplication foo: bar ];
    

    对于应用商店提交,-terminate 肯定会让您的应用因使用(官方)未记录的 API 而被拒绝。据报道,exit(0) 也这样做了,即使它是一个记录在案的操作系统调用。

    在 OS 4.0 之前,您始终可以向 Safari 发送 URL,这会导致操作系统正常终止您的应用程序。不知道在 OS 4.0 和之后的应用商店合法做什么。

    【讨论】:

    • 要通过 Safari URL 在 iOS 4.0 下终止您的应用程序,您还需要添加 UIApplicationExitsOnSuspend plist 键。将用户发送到一个解释所发生情况的网页比让您的应用闪现要好得多。
    【解决方案3】:

    这对我来说没有任何意义 - 内部重置应该没有任何资源。强制关闭应用对用户来说很糟糕。

    【讨论】:

    • 你在评论我的意图吗?
    • 不,我告诉你,如果你强行关闭应用程序,用户可能会删除它并给它打一星。更不用说如果Apple发现他们甚至不会首先接受该应用程序。我只是想帮助你避免不必要的关机,这会给你带来更多的痛苦。由于它是某种类型的数据损坏,更好的方法是在启动时清除数据存储,然后再发生其他任何事情。
    • 我有几个在 OS 3.1.x 下强制关闭的应用程序,用户似乎喜欢能够启动 Safari 以查找更多信息。
    • 当您未连接到 Internet 时,我看到警报视图会导致“Word With Friends”退出。我认为这是一个很好的理由。
    • 抱歉,这个用例很糟糕。让我退出应用程序 - 如果我的连接只是不稳定并且我知道它会马上恢复怎么办?对我来说太糟糕了,该应用程序决定自行崩溃。我和其他许多人对这种行为的评价是一星。再说一次,你可能不会进入应用商店。
    猜你喜欢
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 2014-05-22
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    相关资源
    最近更新 更多