@noescape优化编译器编译,swift 2.1引入。

函数假设有一个一个參数是closure的话,能够在前面加一个关键字@noescape表示在函数return前closure生命周期结束,能够优化编译。

(closure 是引用类型, 能够引用到别的地方,例如以下:)

class A{
var b: (Void -> Void)! func lalala(a: (Void->Void)){
self.b = a//引用到属性b了
}
}

像上面的情况lalala的參数a是不能在前面标记@noescape

class A{
var b: (Void -> Void)! func aa(@noescape a: (Void->Void)){
self.b = a//会报错,报类型不一样
}
}

而没有引用到外层的closure能够加@noescape比如

class A{
var b: (Void -> Void)! func aa(@noescape a: (Void->Void)){
a()//不会报错,这个不会再外部再次被调用
}
}

@noescape 还有个特性就是标记了 @noescape的closure能够免去写引用self。swift的普通closure使用self时都须要。这个能够例外。

由于他相当于一个同步的调用。不会产生循环引用,所以不用特意强调self

class A{
var b: (Void -> Void)! var k = 0//用来调用的 func aa(@noescape a: (Void->Void)){
a()
} func bb(){
aa { () -> Void in
k = 1//一般的closure都是要self.k = 1,@noescape则不须要
}
}
}

讨论:啥时候会用到@noescape?如今非常多函数式编程,比方有个排序,须要一个比較的closure作为參数,这样的closure都会是同步调用完成获得返回值。这样的能够放一个@noescape在前面,可优化内存。引用self不必写self。其它的closure在外部引用着等待将来回掉用的则不能@noescape,由于它会escape。整体来说这个@noescape没啥卵用。可是有些人会用,可能会吓到你。比方我昨天就看到一个用了这个的,这个基本能够无视。苹果文档链接

Swift2.1keyword @noescape介绍的更多相关文章

  1. SQLMAP参数介绍

    转自:http://zhan.renren.com/bugpower?gid=3602888498044629629&checked=true SQLMAP参数介绍 sqlmap的使用方式:p ...

  2. Swift介绍

    Swift介绍 Swift介绍 Swift发布于2014年wwdc大会,是苹果推出的一门编程语言,刚推出的时候主要在os X和iOS平台,今年wwdc大会上,苹果公司宣布今年年底Swift将会开源,开 ...

  3. (IOS)Swift2.0 Radio 程序分析

    本文主要分享下楼主在学习Swift编程过程中,对GitHub上的一个开源项目Swift Radio的研究心得. 项目地址:https://github.com/swiftcodex/Swift-Rad ...

  4. Apache中 RewriteRule 规则参数介绍

    Apache中 RewriteRule 规则参数介绍 摘要: Apache模块 mod_rewrite 提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求.它支持每个完整规则可以拥有不限数量 ...

  5. Apache的rewrite规则详细介绍

    Apache的rewrite规则详细介绍 发布日期:2008-09-02 16:16 来源: 作者: 点击:7044 rewrite标志 R[=code](force redirect) 强制外部重定 ...

  6. FreeMaker入门介绍

    一.FreeMaker介绍 FreeMarker是一款免费的Java模板引擎,是一种基于模板和数据生成文本(HMLT.电子邮件.配置文件.源代码等)的工具,它不是面向最终用户的,而是一款程序员使用的组 ...

  7. freemarker语法介绍及其入门教程实例

    # freemarker语法介绍及其入门教程实例 # ## FreeMarker标签使用 #####一.FreeMarker模板文件主要有4个部分组成</br>####  1.文本,直接输 ...

  8. 莫名其妙的标记之@noescape

    Swift 中经常遇到一些不熟悉的关键字, 例如@autoclosure, @noescape...等等, 为什么要加这样的关键字, 我自己写方法的时候什么时候要加, 什么时候不加, 都是应该考虑的问 ...

  9. Swift2.0语言教程之类的属性

    Swift2.0语言教程之类的属性 类 虽然函数可以简化代码,但是当一个程序中出现成百上千的函数和变量时,代码还是会显得很混乱.为此,人们又引入了新的类型——类.它是人们构建代码所用的一种通用.灵活的 ...

随机推荐

  1. rpm管理环境包和代码包

    Author: JinDate: 20140610System: CentOS release 6.5 (Final) 06-09-2014c零:问题配置文件问题,不打包使用的配置文件参考配置文件后缀 ...

  2. 在WPF中使用全局快捷键

    今天写一个小程序中使用到了全局快捷键,找到了我之前写的文章在c#中使用全局快捷键翻了一下,发现它是WinForm版本的,而我现在大部分写WPF程序了,便将其翻译了为WPF版本的了. static cl ...

  3. fragment和fragmentactivity解析

    一.为什么要使用Fragment  1.当我们须要动态的多界面切换的时候,就须要将UI元素和Activity融合成一个模块.在2.3中我们一般通过各种Activity中进行跳转来实现多界面的跳转和单个 ...

  4. asp.net MVC 3/4 equivalent to a response.filter

    am in a need to intercept all of the html that will be sent to the browser and replace some tags tha ...

  5. 使用jdbc的缺点

    使用jdbc开发时有以下缺点 1,数据库连接,使用时就创建,不使用就释放,对数据库进行频繁连接开关和关闭,造成数据库资源浪费,影响数据库的性能 解决:使用数据库连接池管理数据库的连接 2,sql语句使 ...

  6. 7. python 字符串格式化方法(2)

    7. python 字符串格式化方法(2) 紧接着上一章节,这一章节我们聊聊怎样添加具体格式化 就是指定替换字段的大小.对齐方式和特定的类型编码,结构如下: {fieldname!conversion ...

  7. 【docker-compose】使用docker-compose启动spring-boot+mysql,服务内连数据库报错:create connection SQLException, url: jdbc:mysql://mysql:33061/swapping?useSSL=false&useUnicode=true&characterEncoding=UTF-8, errorCode 0,

    完整配置在这里, https://www.cnblogs.com/sxdcgaq8080/p/10070948.html 启动报错如下: 2018-12-05 01:04:05.569 ERROR 1 ...

  8. 【java】将字符串的首字母大写

    工具方法: public static void main(String[] args) { System.out.println(upperCaseFirst("barer")) ...

  9. jQuery插件——可以动态改动颜色的jQueryColor

    1.请选择代码框中所有代码后, 保存为 jquery.color.js /*! * jQuery Color Animations v@VERSION * https://github.com/jqu ...

  10. java 字符串,字符数组,list间的转化

    1.关于java.lang.string.split xxx.split()方法可以将一个字符串分割为子字符串,然后将结果作为字符串数组返回. 2.字符串转字符数组 String str =" ...