美文网首页
Swift 逃逸闭包@escaping

Swift 逃逸闭包@escaping

作者: ChancePro | 来源:发表于2018-11-29 22:35 被阅读11次

非逃逸闭包

非逃逸闭包的生命周期:

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

逃逸闭包

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

逃逸闭包使用场景

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

相关文章

  • iOS swift 逃逸闭包(@escaping)和非逃逸闭

    iOS swift 逃逸闭包(@escaping)和非逃逸闭包 (@noescaping) 逃逸闭包: 逃逸闭包...

  • Swift: @escaping 和 @noescaping 是

    @noescaping: 非逃逸闭包类型@escaping: 逃逸闭包类型 Swift 3.0 之后,传递闭包...

  • Swift中的闭包

    在Swift中有两种闭包,逃逸闭包(@escaping)和非逃逸闭包(@nonescaping)。从Swift 3...

  • iOS开发随笔

    1.swift3.0后的闭包默认是非逃逸闭包, 所以在逃逸闭包前需要添加@escaping2.instrument...

  • Swift3:@escaping

    @escaping 在Swift3中,闭包默认是非逃逸的。在Swift3之前,事情是完全相反的:那时候逃逸闭包是默...

  • Swift3:@escaping

    @escaping 在Swift3中,闭包默认是非逃逸的。在Swift3之前,事情是完全相反的:那时候逃逸闭包是默...

  • Escaping Closures - Swift

    逃逸闭包和非逃逸闭包 逃逸闭包(escaping closure),什么是逃逸闭包?苹果官方给的定义是:当一个闭包...

  • @escaping swift逃逸闭包和非逃逸闭包

    使用@escaping关键字的闭包是逃逸闭包 闭包默认是非逃逸闭包 逃逸闭包延长了闭包的生命周期 非逃逸闭包生命周...

  • iOS相关 | swift 闭包

    一、闭包分为:1.逃逸闭包(Escaping Closures)2.非逃逸闭包(Nonescaping Closu...

  • 非逃逸闭包和逃逸闭包的简单理解

    // @escaping// 非逃逸闭包、逃逸闭包,一般都是当做参数传递给函数// 非逃逸闭包:闭包调用发生在函数...

网友评论

      本文标题:Swift 逃逸闭包@escaping

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