您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Swift中未捕获的错误/异常处理

Swift中未捕获的错误/异常处理

Swift没有机制来捕获所有任意的运行时异常。原因在

在swift-users论坛中。提取

Swift做出了明智的选择,不包括通过任意堆栈帧抛出的异常,这并不是因为它在技术上是不可能的,而是因为其设计者认为代价太高。

问题是这样的:如果一段代码由于错误而要提早退出,则必须编写该代码来处理该提早退出。否则,它将无法正常工作- 无法释放内存,无法关闭文件句柄/套接字/数据库连接/其他内容,无法释放锁等。在Java这样的语言中,编写真正的异常安全代码需要大量的try / finally。块。这就是为什么没人这样做。他们对可能发生的异常以及泄漏的危险资源做出判断,并且仅针对特定的预期条件保护其代码。然后发生了无法预料的事情,并且程序中断了。

在像Swift这样的引用计数语言中,情况甚至更糟,因为在出??现异常的情况下正确平衡引用计数基本上要求每个函数都包含一个隐式的finally块来平衡所有保留计数。这意味着编译器必须在某些调用或另一个引发异常的偶然机会上生成大量额外的代码。该代码的绝大部分从未使用过,但必须存在,使过程变得blo肿。

由于这些问题,Swift选择不支持传统异常。相反,它仅允许您在代码的特殊标记区域中引发错误。但是作为必然结果,这意味着,如果在无法抛出的代码中确实出了点问题,那么为防止灾难所做的一切实际上就是崩溃。当前,唯一会崩溃的是整个过程。

有关更多信息,请参见

Swift 2022/1/1 18:16:38 有447人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶