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语言教程之类的属性 类 虽然函数可以简化代码,但是当一个程序中出现成百上千的函数和变量时,代码还是会显得很混乱.为此,人们又引入了新的类型——类.它是人们构建代码所用的一种通用.灵活的 ...
随机推荐
- [置顶] 解决EXTJS文本框长度验证在ORACLE数据库下不正确的问题
由于ORACLE数据库里面一个汉字和符号占2 个字节,数字和英文占1个字节,所以用EXTJS的文本框MaxLenght去限制输入的长度是不正确的,因为EXTJS只限制了输入的字数量,而不是字节数量. ...
- Android File Hierarchy : System Structure Architecture Layout
Most of the Android user are using their Android phone just for calls, SMS, browsing and basic apps, ...
- java基础学习总结——多态(动态绑定)
一.面向对象最核心的机制——动态绑定,也叫多态
- MVC把表格导出到Excel
有关Model: namespace MvcApplication1.Models { public class Coach { public int Id { get; set; } public ...
- Blocks与Dispatch Queue的使用
block是什么block是一个C level的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似.用于回调函数的地方.两个对象间的通讯.实现轻量级的“代理”. blocks和C语言函数指针的 ...
- Arcgis10.5 python按属性分割图层,属性相同分为一个图层
# coding=utf-8 """ Source code for potential gp tool to create outputs based on attri ...
- wrap ConcurrentDictionary in BlockingCollection
ConcurrentDictionary<int, BlockingCollection<string>> mailBoxes = new ConcurrentDictiona ...
- rman多通道全备份脚本
run{ allocate channel d1 type disk; allocate channel d2 type disk; allocate channel d3 type disk; ...
- Xcode插件管理器Alcatraz的使用
Xcode插件管理器Alcatraz的使用 下载地址 https://github.com/alcatraz/Alcatraz 下载软件包 解压以及编译 重启Xode并Load Bundle 安装插件 ...
- Python Post img
from poster.encode import multipart_encode from poster.streaminghttp import register_openers import ...