栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

  • [速动用户]“商业应用市场”的火焰

在swift-users论坛中。提取:

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

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

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

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

有关更多信息,请参见

  • 错误处理理由和建议


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/484532.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号