Swift2.1keyword @noescape介绍
@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介绍的更多相关文章
- SQLMAP参数介绍
转自:http://zhan.renren.com/bugpower?gid=3602888498044629629&checked=true SQLMAP参数介绍 sqlmap的使用方式:p ...
- Swift介绍
Swift介绍 Swift介绍 Swift发布于2014年wwdc大会,是苹果推出的一门编程语言,刚推出的时候主要在os X和iOS平台,今年wwdc大会上,苹果公司宣布今年年底Swift将会开源,开 ...
- (IOS)Swift2.0 Radio 程序分析
本文主要分享下楼主在学习Swift编程过程中,对GitHub上的一个开源项目Swift Radio的研究心得. 项目地址:https://github.com/swiftcodex/Swift-Rad ...
- Apache中 RewriteRule 规则参数介绍
Apache中 RewriteRule 规则参数介绍 摘要: Apache模块 mod_rewrite 提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求.它支持每个完整规则可以拥有不限数量 ...
- Apache的rewrite规则详细介绍
Apache的rewrite规则详细介绍 发布日期:2008-09-02 16:16 来源: 作者: 点击:7044 rewrite标志 R[=code](force redirect) 强制外部重定 ...
- FreeMaker入门介绍
一.FreeMaker介绍 FreeMarker是一款免费的Java模板引擎,是一种基于模板和数据生成文本(HMLT.电子邮件.配置文件.源代码等)的工具,它不是面向最终用户的,而是一款程序员使用的组 ...
- freemarker语法介绍及其入门教程实例
# freemarker语法介绍及其入门教程实例 # ## FreeMarker标签使用 #####一.FreeMarker模板文件主要有4个部分组成</br>#### 1.文本,直接输 ...
- 莫名其妙的标记之@noescape
Swift 中经常遇到一些不熟悉的关键字, 例如@autoclosure, @noescape...等等, 为什么要加这样的关键字, 我自己写方法的时候什么时候要加, 什么时候不加, 都是应该考虑的问 ...
- Swift2.0语言教程之类的属性
Swift2.0语言教程之类的属性 类 虽然函数可以简化代码,但是当一个程序中出现成百上千的函数和变量时,代码还是会显得很混乱.为此,人们又引入了新的类型——类.它是人们构建代码所用的一种通用.灵活的 ...
随机推荐
- 读书笔记_Effective_C++_条款三十五:考虑virtual函数以外的其他选择
举书上的例子,考虑一个virtual函数的应用实例: class GameCharacter { private: int BaseHealth; public: virtual int GetHea ...
- mySql---or和in的效率问题(和<=、>=、between之间的关系)
写在前面: 本文是直接拿取的别人的实验数据作参考,然后对数据作分析. 参考网友的测试数据结果: 在网上一直看到的是or和in的效率没啥区别,一直也感觉是这样,前几天刚好在看<mysql数据库开发 ...
- Windows下openssl安装及使用
配置过程中需要生成一些mak文件,这些生成代码用perl脚本生成,所以要安装一个ActivePerl. 网址: http://www.activestate.com/activeperl/ 下载后直接 ...
- Linux给目录创建软链接的技巧
ln -s /home/fei/workspace /var/www 注意:源目录和目标目录都必须是绝对路径
- java linux 项目常常无故被关闭 进程无故消息
布了几个项目.竟然天天会自己主动的挂掉.急了.花时间攻克了一下.总结方案例如以下: 1.磁盘满了.这大家都懂,清一下 2.tomcat在关闭的或是重新启动的时候,经常后台进程没有被关闭.须要用ps a ...
- 通过adb shell操作android真机的SQLite数据库
要通过命令行直接操作android真机上的SQLite数据库,可以直接通过adb shell来完成,不过,前提是必须获得root权限. 另外,android系统其实就是linux的shell,这个应该 ...
- IntelliJ IDEA 学习(五)类注释和自定义方法注释
intellj idea的强大之处就不多说了,相信每个用过它的人都会体会到,但是我们经常会感觉他很复杂,尤其刚从eclipse转过来的童鞋,相信刚开始的那段经历都是不堪回首的 如何实现 ...
- C语言每日小练(四)——勇者斗恶龙
勇者斗恶龙 你的王国里有一条n个头的恶龙,你希望雇佣一些骑士把它杀死(砍掉全部的头). 村里有m个骑士能够雇佣.一个能力值为x的骑士能够砍掉恶龙一个致敬不超过x的头,且须要支付x个金币. 怎样雇佣骑士 ...
- Oracle手工生成段建议(Segment Advisor)
一.描写叙述 从oracle 10g開始,oracle引入了段顾问(Segment Advisor),用于检查数据库中是否有与存储空间相关的建议,而且从10gR2開始,oracle自己主动调度并执行一 ...
- Bootstrap 3之美02-Grid简介和应用
本篇主要包括: ■ Grid简介■ 应用Grid■ Multiple Grids Grid简介 Bootstrap中,把页面分成12等份,这就是所谓的Grid. 在Bootstrap中,用类名控 ...