1

长期潜伏者,第一次海报。

我正在编写一个可可应用程序,它大量使用 NSOperationQueues 来管理后台任务。这个应用程序是对一个使用手动管理的 NSThreads 来完成类似事情的旧应用程序的重写。

其中一项要求是我们捕获/记录所有未捕获的异常以避免应用程序终止。在旧版本的应用程序中,我们将使用 NSExceptionHandler API 安装所有线程的异常陷阱。现在我们从线程中移除了一个抽象级别,我无法访问线程对象(事实上,我的印象是队列使用的线程可能会在每次操作调用时发生变化)。

当后台操作失败时,防止我的应用程序崩溃的推荐/最佳方法是什么?

如果重要,部署在 Mac OS X 10.6 上。

4

1 回答 1

1

我使用以下方法为自己解决了这个问题:

NSInteger mask = (NSLogUncaughtExceptionMask| NSHandleUncaughtExceptionMask | NSLogUncaughtSystemExceptionMask | NSHandleUncaughtSystemExceptionMask | NSLogUncaughtRuntimeErrorMask | NSHandleUncaughtRuntimeErrorMask | NSLogTopLevelExceptionMask | NSHandleTopLevelExceptionMask);
[[NSExceptionHandler defaultExceptionHandler] setDelegate:[[MyExceptionHandler new] autorelease]];      
[[NSExceptionHandler defaultExceptionHandler] setExceptionHandlingMask:mask];

详细信息可在指南异常编程主题的“控制程序对异常的响应”部分中找到

于 2012-12-09T16:18:36.850 回答