gpt4 book ai didi

objective-c - 我可以在Objective-C中捕获从另一个线程的一个线程抛出的异常吗?

转载 作者:行者123 更新时间:2023-12-03 07:48:07 24 4
gpt4 key购买 nike

是否可以捕获从另一个线程中的一个线程引发的异常?例如,我从主线程生成了一个线程。产生的线程可能会引发未捕获的异常。是否有可能使生成线程捕获这些异常?

一种解决方案是从生成的线程的入口点捕获异常,并通过发布NSNotification来“处理”异常。然后,生成线程可以监听这些NSNotification。但是,此解决方案似乎有点局促,因为在给定不同类型的NSException s作为参数的情况下,它基本上是重新实现@catch子句。我想检查是否有其他可用的解决方案。

最佳答案

这是不可能的,毫无意义的。抛出线程无法知道生成线程当前是否正在try块内运行。如果没有,它将怎么办?推迟 throw 直到产卵者愿意捕获吗?如果永远都不会呢?

考虑另一种情况。当生成器线程正在执行某项操作并且恰好处于不一致状态时,就会在工作线程中引发异常-例如,它处于更新某些数据结构的过程中。异常将中断执行流程,并使数据处于所述不一致状态。更不用说产生者所做的任何其他好工作将永远是不完整的。

因此,正确的处理方法是捕获工作线程的顶层,并使用[NSObject performSelector:]之类的内容传递给生成器线程。应当告知生成者有关Spawnee中的booboo的一般想法是可靠的,但是将Spawnee的异常抛出到Spaawne上是不正确的。注意-我说的是“抛出”,而不是通过 cocoa 提供的其他机制传递。

关于objective-c - 我可以在Objective-C中捕获从另一个线程的一个线程抛出的异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8859777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com