objective-c - 如何在 NSOperationQueues 上自动安装 NSExceptionHandlers?

标签 objective-c multithreading macos cocoa exception

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

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

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

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

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

最佳答案

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

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

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

关于objective-c - 如何在 NSOperationQueues 上自动安装 NSExceptionHandlers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12199696/

相关文章:

ios - 快速滚动 UITableView 的错误图像

java - 你会如何设计协作/可共享的文本编辑器 : Key points are given below

multithreading - 同时或顺序写入——速度重要吗?

objective-c - 以编程方式更改为其他空间 (MacOSX)

macos - Mac OS X : Bring (non-bundle) GUI applications to foreground when launched from the command line

ios - Storyboard中设置的 UITableViewCell 的恢复 ID 和标识符之间有什么区别

ios - ABAddressBook 规范化电话号码

java - 当我们使用 synchronized 关键字时,什么被锁定了?

macos - NSIndexSet.enumerateIndexesUsingBlock 使用 Swift Closure

objective-c - 什么是 (void *) 参数