为什么默认情况下 swift 关闭是非转义的?

时间:2021-07-19 18:51:51

标签: swift

我发现默认的 swift 闭包是非转义闭包,但没有找到任何解释为什么会这样。

谁能解释一下?

2 个答案:

答案 0 :(得分:2)

转义闭包引入了额外的内存管理问题。您可以创建保留循环。 map(采用非转义闭包)不担心保留循环,因此您不必在闭包中添加 self 以提醒调用者危险。 DispatchQueue.async 采用转义闭包,因此调用者需要对闭包的生命周期多加考虑,因此需要额外的语法来警告调用者。如果转义是默认设置,这将使本应简单的调用复杂化并减少优化机会。

答案 1 :(得分:1)

在 Swift 中,闭包默认是非转义的。这意味着闭包不能超过它作为参数传入的函数。如果您需要在将其传递给返回的函数之后保留该闭包,则需要使用关键字 @escaping

标记该闭包
相关问题