有没有办法禁止运行时错误在后台线程上崩溃应用程序?

时间:2016-03-18 18:38:53

标签: ios swift

我正在以这种方式运行方法

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), { () -> Void in
        ...
})

我想要这个逻辑,以避免在内部出现问题时崩溃应用程序。有没有办法这样做?

请不要回答修复bug,如果有的话,我说的是我找不到的任何潜在的错误。这运行在一个计时器来处理来自服务器的数据,如果崩溃,它会使app无法使用,因为它会在启动时崩溃。

在最糟糕的情况下,应用程序可以在没有此数据处理的情况下生存,但启动时崩溃的应用程序会更糟糕,因为应用程序根本无法使用。

我知道Swift没有捕获意外异常,但是如果出现问题,可能有办法避免后台线程崩溃应用

1 个答案:

答案 0 :(得分:1)

为了回应@nhgrif所说的话,这是一个非常糟糕的主意,我只会考虑这是一个大量不受控制的代码的情况,即来自其他我没有能力的代码修复错误。

我能想到的两个选择:

  1. 在单独的流程中运行处理,流程失败将导致子流程终止,但不会终止父流程。

  2. 假设您在* nix平台(iOS,MacOS,Linux等)上运行,您将使用相同的signalsigaction调用来捕获C中的这些异常,C ++等可用,因此您可以使用它来处理异常情况,并可能更优雅地终止。

  3. 同样,这些都真的感觉像是可怕的想法,违反了Swift的一个基本原则,即运行时故障是致命的,应该修复,而不是解决。