Swift--逃逸闭包与非逃逸闭包(Swift3.1)
逃逸闭包和非逃逸闭包的理解:
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)相关推荐
- Swift中的逃逸闭包(@escaping )与非逃逸闭包(@noescaping)
逃逸闭包 概念:一个接受闭包作为参数的函数,该闭包可能在函数返回后才被调用,也就是说这个闭包逃离了函数的作用域,这种闭包称为逃逸闭包.当你声明一个接受闭包作为形式参数的函数时,你可以在形式参数前写@e ...
- 逃逸闭包(@escaping)和非逃逸闭包
逃逸闭包:当函数执行结束后,才去调用函数内部的闭包,叫做逃逸闭包 非逃逸闭包:当函数执行过程中,执行的函数内部的闭包,叫做非逃逸闭包 @noescape import UIKitclass ViewC ...
- Swift中文教程(七) 闭包
闭包(Closures)是独立的函数代码块,能在代码中传递及使用.Swift中的闭包与C和Objective-C中的代码块及其它编程语言中的匿名函数相似. 闭包可以在上下文的范围内捕获.存储任何被定义 ...
- Swift学习(八):闭包(闭包表达式,尾随闭包,闭包的定义,自动闭包)
闭包表达式(Closure Expression) 可以通过func定义一个函数,也可以通过闭包表达式定义一个函数 func函数 闭包定义函数 闭包表达式调用可以直接省略参数名 闭包定义函数也可以写为 ...
- python的闭包要素_Python的闭包
我的理解,Python中的闭包和其他语言中的闭包一样,都是在一个函数中返回另一个函数.def out_fun(num): print('------1-----') def in_fun(in_num ...
- python中闭包函数_Python的闭包问题(关于内嵌函数引用闭包函数的变量问题)
一.闭包: 记得:闭包的特性就是:内嵌函数会保存它引用的外围函数的变量值. 闭包概念:在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数和被引用的变量等 ...
- python闭包修改全局变量_Python 闭包 自由变量
理解:封闭的东西:保证数据的安全 #平均收盘价 方案一数据是不安全的 l1 = [] def make_average(new_value): l1.append(new_value) total = ...
- Go 学习笔记(18)— 函数(04)[闭包定义、闭包修改变量、闭包记忆效应、闭包实现生成器、闭包复制原对象指针]
1. 闭包定义 Go 语言中闭包是引用了自由变量的函数,被引用的自由变量和函数一同存在,即使已经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量,因此,简单的说: 函数 + ...
- 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法 )
文章目录 一.闭包类 Closure 简介 二. 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法 三. 完整代码示例 一.闭包类 Closure ...
最新文章
- 加速键使用方法详解(示例)
- iframe高度动态自适应
- 乐鑫代理启明云端分享|ESP32系列教程之三: VS Code远程连接Linux
- 使用BIND安装智能DNS服务器(一)---基本的主从DNS服务器搭建
- 如何实现新浪微博功能:关注某个的发布信息,自动点赞和转发
- 计算机的装机配件,京东买的配件怎么装机自己组装教程
- 旋转屏幕时数据的保存与恢复
- 宋浩概率论与数理统计-第一章-笔记
- 如何给php安装上pecl,PHP安装PECL扩展的方法
- python打印输出数组中的所有元素
- ubuntu cron 定时任务
- JavaScript实现在线websocket WSS测试工具 -toolfk程序员工具网
- gitlab合并分支
- 使用百度云加速防apache的ab测试ddos攻击
- 帆软填报问题之填报显示提交成功,数据库却查不到数据
- 社群运营有哪六种裂变模型?
- STM32和ST-LINK V2的连接与调试
- 如何让人形机器人“行稳致远”?这篇顶级期刊的论文提出了新方法
- 雨量预警广播自动化数据平台BWII 型广播预警监测仪
- 制造企业如何满足客户需求?精益生产教您三招