我们可以在iOS App崩溃时停止关闭应用程序

时间:2018-01-19 10:44:40

标签: ios exception-handling

我已经实现了iOS App,因为如果我们遇到任何未知的崩溃,我想要显示一条消息,例如“抱歉有些事情出错了”。同时应用程序没有关闭。如果我们崩溃,它仍然会打开。这是客户的要求。

1 个答案:

答案 0 :(得分:4)

简短回答:这不是一个好主意,应该不惜一切代价避免。说服提供该要求的人不应该这样做。

答案很长:当您的应用崩溃时,这意味着出现了可怕的错误。它进入了一个状态,任何时候都无法保证,并且更好(甚至对应用程序用户)立即退出应用程序。崩溃的原因可能是:

  • 未处理的错误
  • 您正在尝试访问一些您无法访问
  • 的内存
  • 访问已经取消分配的内存,但您的应用代码认为它仍然分配给特定对象
  • 还有更多原因

对于第一种情况,您可以在应用中或全局设置未处理的错误处理程序;这就是崩溃报告SDK所做的事情。由于其他原因,您需要设置信号处理程序(甚至是Mach异常处理程序)来获取它们。在这些情况下的一个规则是,在崩溃时你不应该分配新的内存,只是因为你无法保证可以工作或不会覆盖你的应用程序的其他部分使用的内存,这可能会导致用户的严重损坏。数据,或设备死锁,这意味着设备所有者必须重新启动它。

不允许在崩溃时分配任何内存意味着您无法使用任何Swift或Objective-C代码,因为分配新对象将分配新内存。并且显示警报只会这样做,因为让应用程序继续运行也会这样做。您只能在崩溃时使用(异步安全)C方法的子集!

所以故事的结尾是:

  • 检测到崩溃很难
  • 在崩溃后更难以对用户数据造成损害
  • 保证应用程序将继续运行而不会对用户数据造成损害或完全可用于用户而没有更多问题,这是运气方面

如果操作系统因为这种不安全的情况而决定您的应用程序应该退出(崩溃),那么您作为应用程序开发人员不应该另行决定。