美文网首页Apple
iOS相关 | swift 闭包

iOS相关 | swift 闭包

作者: JasonL | 来源:发表于2018-06-11 18:29 被阅读0次

一、闭包分为:
1.逃逸闭包(Escaping Closures)
2.非逃逸闭包(Nonescaping Closures)
在swift 3.0中,传递闭包到函数中的时候,系统会默认为非逃逸闭包类型

二、非逃逸闭包
非逃逸闭包的生命周期比较简单:
1.把闭包作为参数传递给函数。
2.函数中运行该闭包。
3.退出函数。

非逃逸闭包
显而易见是非逃逸闭包被限制在函数内,当函数退出的时候,该闭包引用计数不会增加,也就是说其引用计数在进入函数和退出函数时保持不变。

三、逃逸闭包
逃逸闭包恰恰与非逃逸闭包相反,其生命周期长于相关函数,当函数退出的时候,逃逸闭包的引用仍然被其他对象持有,不会在相关函数结束后释放。

Swift 3.x中, 闭包参数默认是非逃逸类型,如果需要其逃逸类型的闭包,记得使用关键字 @escaping

而对于非逃逸型闭包,由于其生命周期确定短于相关函数,编译器可以据此做性能优化。

注意

要谨慎使用@escaping(逃逸闭包),除非明确知道要使用它做什么。

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

相关文章

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

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

  • iOS相关 | swift 闭包

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

  • Swift 5.1 (7) - 闭包

    级别: ★☆☆☆☆标签:「iOS」「Swift 5.1」「闭包」「逃逸闭包」「尾随闭包」作者: 沐灵洛审校: Qi...

  • swift4.1 系统学习十一 闭包

    //// main.swift// swift11(闭包)//// Created by iOS on 20...

  • Swift5.x-枚举(中文文档)

    引言 继续学习Swift文档,从上一章节:闭包,我们学习了Swift闭包相关的内容,如闭包的定义和使用、闭包的简写...

  • JavaScript学习之路-闭包

    一、闭包? 闭包一词想必iOS开发的童鞋指定很熟悉,Objective-C上的闭包叫Block,Swift上就叫闭...

  • Swift捕获列表Capture List

    闭包的特点 swift的iOS的app中,遍布着各种闭包,闭包中经常出现捕获列表,我们经常用[weak self]...

  • Swift 闭包整理

    Swift 闭包整理 http://www.cocoachina.com/ios/20161201/18250.html

  • Swift-闭包

    Swift 闭包 函数 ()->() Swift 中的闭包和 Objective-C 中的 block 类似,闭包...

  • Swift闭包和函数

    函数在Swift中只是一种特殊的闭包,闭包在Swift语言中是一等公民,支持闭包嵌套和闭包传递。Swift中的闭包...

网友评论

    本文标题:iOS相关 | swift 闭包

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