我正在以这种方式运行方法
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), { () -> Void in
...
})
我想要这个逻辑,以避免在内部出现问题时崩溃应用程序。有没有办法这样做?
请不要回答修复bug,如果有的话,我说的是我找不到的任何潜在的错误。这运行在一个计时器来处理来自服务器的数据,如果崩溃,它会使app无法使用,因为它会在启动时崩溃。
在最糟糕的情况下,应用程序可以在没有此数据处理的情况下生存,但启动时崩溃的应用程序会更糟糕,因为应用程序根本无法使用。
我知道Swift没有捕获意外异常,但是如果出现问题,可能有办法避免后台线程崩溃应用
答案 0 :(得分:1)
为了回应@nhgrif所说的话,这是一个非常糟糕的主意,我只会考虑这是一个大量不受控制的代码的情况,即来自其他我没有能力的代码修复错误。
我能想到的两个选择:
在单独的流程中运行处理,流程失败将导致子流程终止,但不会终止父流程。
假设您在* nix平台(iOS,MacOS,Linux等)上运行,您将使用相同的signal
和sigaction
调用来捕获C中的这些异常,C ++等可用,因此您可以使用它来处理异常情况,并可能更优雅地终止。
同样,这些都真的感觉像是可怕的想法,违反了Swift的一个基本原则,即运行时故障是致命的,应该修复,而不是解决。