Swift 逃逸闭包@escaping

非逃逸闭包

非逃逸闭包的生命周期:

  1. 把闭包作为参数传递给函数。
  2. 函数中运行该闭包。
  3. 退出函数。
    非逃逸闭包被限制在函数内,当函数退出时,该闭包的引用计数不会增加,也就是说其引用计数在进入函数和退出函数时保持不变。

逃逸闭包

当一个闭包作为参数传到一个函数中,但是这个闭包在函数返回之后才被执行,我们称该闭包从函数中逃逸。
逃逸闭包生命周期长于相关函数,当函数退出时,逃逸闭包的引用仍然被其他对象持有,不会再相关函数结束后释放。
闭包参数默认是非逃逸类型。如果需要其逃逸类型的闭包,可以使用关键字@escaping

逃逸闭包使用场景

  • 异步调用:如果需要调度队列中异步调用闭包,这个队列会持有闭包的引用,至于什么时候调用闭包,或者闭包什么时候运行结束都是不可预知的。
  • 存储:需要存储闭包作为属性,全局变量或者其他类型做稍后使用。

你可能感兴趣的:(Swift 逃逸闭包@escaping)