抛出会严重影响Swift的性能吗?

时间:2019-04-18 20:16:09

标签: swift

我在其他线程中读过,例如this,只有在真正特殊的情况下,才应该在c ++之类的语言中引发异常,因为编译器会尽力而为。在非例外情​​况下,代码将尽可能快地运行,然后通过拥有昂贵的例外情况来为此速度付出代价。这在Swift中也会发生吗?

迅速的开发人员似乎通常都可以抛出异常,我想知道是否应该避免使用do-try-catch模式。

2 个答案:

答案 0 :(得分:3)

关于Swift中错误处理的documentation说:

  

... throw语句的性能特性与return语句的性能特性相当。

因此,因为无论如何您都将退出当前范围,所以投掷几乎没有任何额外费用。

答案 1 :(得分:3)

在Swift中将throwcatch视为gotojump的安全,受控形式。它是安全且受控制的,因为编译器会发现除非有其他人要抓住,否则您将无法抛出该异常。因此,在编译时完全知道什么情况下会发生什么。

这与Objc异常完全不同,后者事先一无所知,在运行时,我们只是盲目地在每个步骤进行自省,并最终导致崩溃。