逃逸闭包和非逃逸闭包的理解:

  Swift中的闭包有两种:逃逸闭包和非逃逸闭包。逃逸闭包表示闭包将在函数返回之后执行;而非逃逸闭包则表示在函数返回前,即函数内部执行。

  那么我们是否可以理解为:如果闭包作为某个函数的参数,这个函数在执行闭包时,如果为异步执行,闭包就为逃逸闭包;如果为同步执行,闭包就为非逃逸闭包。

逃逸闭包的条件:

  逃逸闭包必须满足以下两个条件:

  1、闭包作为一个参数传到函数中。

  2、闭包在函数返回之后才执行。

  需要在参数前面加入标注: @escaping,用来指明这个闭包是允许“逃逸”出这个函数的。
  注意:将一个闭包标记为 @escaping 意味着你必须在闭包中显式地引用。

Swift3.0中闭包捕捉策略的改变:

  在Swift2.0中,一个函数的参数的闭包捕捉策略都默认为逃逸的,如果需要表示非逃逸闭包,则需要用@noescape关键字来修饰闭包。而大多数人在写闭包参数时都容易忽略判断闭包是否逃逸,如果闭包都被当做了逃逸闭包处理,这对闭包的内存管理优化并不太友好。所以在Swift3.0中,对此进行了对调的改变:所有的闭包都默认为非逃逸闭包,弃用了@noescape。如果需要表示逃逸闭包,则使用@escaping关键字来修饰闭包。

  

实例:

以下代码,callBack在函数执行完后的1秒后才执行,所以是逃逸闭包。

    func startRequest(callBack: ()->Void) {DispatchQueue.global().asyncAfter(deadline: DispatchTime.now() + 1) {callBack()}}

这样就需要显式的声明@escaping才能够编译通过

转载于:https://www.cnblogs.com/lilefan/p/6678608.html

Swift--逃逸闭包与非逃逸闭包(Swift3.1)相关推荐

  1. Swift中的逃逸闭包(@escaping )与非逃逸闭包(@noescaping)

    逃逸闭包 概念:一个接受闭包作为参数的函数,该闭包可能在函数返回后才被调用,也就是说这个闭包逃离了函数的作用域,这种闭包称为逃逸闭包.当你声明一个接受闭包作为形式参数的函数时,你可以在形式参数前写@e ...

  2. 逃逸闭包(@escaping)和非逃逸闭包

    逃逸闭包:当函数执行结束后,才去调用函数内部的闭包,叫做逃逸闭包 非逃逸闭包:当函数执行过程中,执行的函数内部的闭包,叫做非逃逸闭包 @noescape import UIKitclass ViewC ...

  3. Swift中文教程(七) 闭包

    闭包(Closures)是独立的函数代码块,能在代码中传递及使用.Swift中的闭包与C和Objective-C中的代码块及其它编程语言中的匿名函数相似. 闭包可以在上下文的范围内捕获.存储任何被定义 ...

  4. Swift学习(八):闭包(闭包表达式,尾随闭包,闭包的定义,自动闭包)

    闭包表达式(Closure Expression) 可以通过func定义一个函数,也可以通过闭包表达式定义一个函数 func函数 闭包定义函数 闭包表达式调用可以直接省略参数名 闭包定义函数也可以写为 ...

  5. python的闭包要素_Python的闭包

    我的理解,Python中的闭包和其他语言中的闭包一样,都是在一个函数中返回另一个函数.def out_fun(num): print('------1-----') def in_fun(in_num ...

  6. python中闭包函数_Python的闭包问题(关于内嵌函数引用闭包函数的变量问题)

    一.闭包: 记得:闭包的特性就是:内嵌函数会保存它引用的外围函数的变量值. 闭包概念:在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数和被引用的变量等 ...

  7. python闭包修改全局变量_Python 闭包 自由变量

    理解:封闭的东西:保证数据的安全 #平均收盘价 方案一数据是不安全的 l1 = [] def make_average(new_value): l1.append(new_value) total = ...

  8. Go 学习笔记(18)— 函数(04)[闭包定义、闭包修改变量、闭包记忆效应、闭包实现生成器、闭包复制原对象指针]

    1. 闭包定义 Go 语言中闭包是引用了自由变量的函数,被引用的自由变量和函数一同存在,即使已经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量,因此,简单的说: 函数 + ...

  9. 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法 )

    文章目录 一.闭包类 Closure 简介 二. 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法 三. 完整代码示例 一.闭包类 Closure ...

最新文章

  1. 加速键使用方法详解(示例)
  2. iframe高度动态自适应
  3. 乐鑫代理启明云端分享|ESP32系列教程之三: VS Code远程连接Linux
  4. 使用BIND安装智能DNS服务器(一)---基本的主从DNS服务器搭建
  5. 如何实现新浪微博功能:关注某个的发布信息,自动点赞和转发
  6. 计算机的装机配件,京东买的配件怎么装机自己组装教程
  7. 旋转屏幕时数据的保存与恢复
  8. 宋浩概率论与数理统计-第一章-笔记
  9. 如何给php安装上pecl,PHP安装PECL扩展的方法
  10. python打印输出数组中的所有元素
  11. ubuntu cron 定时任务
  12. JavaScript实现在线websocket WSS测试工具 -toolfk程序员工具网
  13. gitlab合并分支
  14. 使用百度云加速防apache的ab测试ddos攻击
  15. 帆软填报问题之填报显示提交成功,数据库却查不到数据
  16. 社群运营有哪六种裂变模型?
  17. STM32和ST-LINK V2的连接与调试
  18. 如何让人形机器人“行稳致远”?这篇顶级期刊的论文提出了新方法
  19. 雨量预警广播自动化数据平台BWII 型广播预警监测仪
  20. 制造企业如何满足客户需求?精益生产教您三招

热门文章

  1. Oracle 包(Package)
  2. 没有好看的 Terminal 怎么能够快乐地写代码
  3. 浅淡Windows7 32位与64位/x86与x64的区别
  4. 关于 HTML5 的 11 个让人难以接受的事实
  5. windows Server 2003   IIS启用父路径
  6. 大话IT职场之办公室环境重要吗?
  7. squid代理(传统代理)
  8. 约瑟夫问题(c++)
  9. 判断一个文件被修改(转)
  10. ibm xml专区中对XPATH的一个好文