【发布时间】:2012-12-27 05:50:11
【问题描述】:
我没有找到符合我经验的文档。
我想要的是一种在后台线程中处理未捕获异常的好方法。这种“方式”应该让应用程序崩溃,但在崩溃之前执行一些非常基本的操作(例如,将值保存到 UserDefaults 以便在下次启动时对其进行检查;加上日志记录)。
在主线程上,我只是设置了一个 uncaughtExceptionHanlder,它工作正常。但是,在后台线程上 - 作为 NSOperationQueue 上的 NSOperation 执行 - 任何异常都会发生但不会退出应用程序:崩溃。应用程序继续在损坏的状态下运行。
但是,线程编程指南指出:
设置异常处理程序 如果您的应用程序捕获并 处理异常,你的线程代码应该准备好捕捉任何 可能发生的异常。虽然最好处理异常 在它们可能发生的地方,未能抓住抛出的 线程中的异常会导致您的应用程序退出。安装一个 线程入口例程中的最终 try/catch 允许您捕获任何 未知异常并提供适当的响应。
一个有效的方法(如下)是使用 try/catch 嵌入线程调用方法,并在出现异常的情况下进行记录,然后调用 abort()。但这不可能是最好的方法。我想将异常发送到主线程并由未捕获异常处理程序处理。 有人做过吗?
- (void)threadMethod
{
@try
{
NSArray* aTest = [NSArray array];
[aTest objectAtIndex:10];
}
@catch (NSException* e)
{
// Save to state to User Defaults.
// Log any needed info.
abort();
}
@finally
{
}
}
仅供参考:我在 iOS6 上运行,使用 XCode 4.5 SDK。
【问题讨论】:
标签: ios multithreading exception exception-handling abort