【发布时间】:2012-02-10 04:47:51
【问题描述】:
是否可以在另一个线程中捕获从一个线程抛出的异常?例如,我正在从我的主线程中生成一个线程。生成的线程可能会抛出未捕获的异常。是否可以让生成线程捕获这些异常?
一种解决方案是从衍生线程的入口点捕获异常,并通过发布NSNotification 来“处理”异常。然后,生成线程可以监听这些NSNotifications。然而,这个解决方案似乎有点笨拙,因为它基本上是在给定不同类型的NSExceptions 作为参数的情况下重新实现@catch 子句。我想检查是否有其他解决方案可用。
【问题讨论】:
-
请注意,异常仅用于指示 iOS/Mac OS X 中不可恢复的错误。如果你对任何可恢复的东西使用异常,那你就错了。
-
仅对不可恢复的错误使用异常是一种惯例,本身并没有错。使用异常有 3 个常见的反对意见 (a) 它们在 Obj-C 中表现不佳 (b) 资源泄漏 (b2) 内存泄漏。 (a) 如果您仅在 异常 情况下使用它们,则可以缓解 - 无论如何您都应该这样做,(b) 必须以独立于语言的基于异常的设计进行处理,并且处理 (b2)( (b)) 由垃圾收集、Obj-C++ 中的 ARC 或 Obj-C 中的 ARC 以及
-fobjc-arc-exceptions辅助。因此,如果您正确使用异常,您就不会“做错了”。对于您的 Q,请参阅 @Seva。 -
@bbum 这些是“不可恢复”的情况。
-
@CRD 查看最新的异常文档。似乎 64 位应用程序的性能有所改进。尽管如此,对于异常来说,性能应该不是一个大问题,它们应该用于异常情况,这意味着这些情况不会经常发生。
-
@RaffiKhatchadourian 好——我只是在确定。
标签: objective-c multithreading exception exception-handling error-handling