美文网首页
@escaping修饰block

@escaping修饰block

作者: rajs20222007 | 来源:发表于2018-11-18 21:56 被阅读0次

Escaping Closure=(逃逸闭包)
如果一个闭包被作为一个参数传递给一个函数, 并且在函数return之后才被唤起执行, 那么这个闭包是逃逸闭包。

【其实用oc时代普通的block作为回调的函数就是这样的,每个block都是希望可以逃避闭包,谁希望马上执行呀】

是个假参数,可以不传,调用者后面跟一个{...}

不逃逸闭包的生命周期:

  1. Pass a closure into a function
  2. The function runs the closure (or not)
  3. The function returns
  4. then this closure die.

逃逸闭包的生命周期

      1. 跟不逃逸一样
  1. 最后的生命周期是closure不会因为function返回而被kill掉;
需要使用 escaping closure的两种case:
  1. 异步execution
    并不能说函数return了就把closure kill掉, 因为这个closure可能还没有执行完毕
  2. 存储
    如果任何全局变量都有一些些存储存在, 那么这个closure也被逃逸掉

插曲

在 Swift 1 和 2中, closure by default 是 escaping的, 所以我们需要用 @noescape 来mark;
在 Swift 3中, closure by default是non-escaping, 我们需要用@escaping 来mark;

相关文章

网友评论

      本文标题:@escaping修饰block

      本文链接:https://www.haomeiwen.com/subject/lelnfqtx.html