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没啥卵用。可是有些人会用,可能会吓到你。比方我昨天就看到一个用了这个的,这个基本能够无视。苹果文档链接

时间: 2024-10-19 07:05:10

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

Swift2.1关键字 @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是不能在前面标记@no

《互动教程 for Xcode7 & Swift2》已成功发布在App Store

不看视频不看书,超级好玩的Xcode教程 利用手指来互动式学习Xcode7 单击.双击.长按.拖动及Xcode7各种快捷键,就像您在真正的Xcode7上操作一样 无痛上手,比观看视频.阅读书籍更加有趣.更加有效的学习方式  变被动学习为主动学习,真正的iOS开发一点通,是您学习iOS移动开发的最佳方式 下载地址:https://itunes.apple.com/cn/app/hu-dong-jiao-cheng-for-xcode7/id1063100471?mt=8 [互动教程 for Xco

Swift介绍

Swift介绍 Swift发布于2014年wwdc大会,是苹果推出的一门编程语言,刚推出的时候主要在os X和iOS平台,今年wwdc大会上,苹果公司宣布今年年底Swift将会开源,开源的部分包括编译器和源代码,这对与开发者来说,是振奋人心的,同时也说明了苹果推懂这门编程语言的决心. 为什么要学习这门语言?我认为有以下几个原因 OC虽然很稳定,但是缺少很多适合现代编程语言的特点.而Swift的一个优点就是modern Swift更加高效 Swift更加interactive Swift是type

莫名其妙的标记之@noescape

Swift 中经常遇到一些不熟悉的关键字, 例如@autoclosure, @noescape...等等, 为什么要加这样的关键字, 我自己写方法的时候什么时候要加, 什么时候不加, 都是应该考虑的问题, 所以打算写一系列文章来介绍一下这些关键字. @noescape @noescape 用来标记一个闭包, 用法如下 func hostFunc(@noescape closure: () -> ()) -> Void @noescape字面意思是无法逃脱. 在上例中, closure 被@no

SQLMAP参数介绍

转自:http://zhan.renren.com/bugpower?gid=3602888498044629629&checked=true SQLMAP参数介绍 sqlmap的使用方式:python sqlmap.py [options]: sqlmap中一共有以下十六个选项卡: 帮助选项卡: Target(目标选项卡): Request(请求选项卡): Optimization(优化选项卡): Injection(注射选项卡): Detection(探测选项卡): Techniques(注

Swift2.2中的新变化

原文链接点击这里 Swift2.2已经更新了,这次更新去除了一些难用的语法还添加了一些缺失的特性,并且还弃用了一些有争议的语言特性.这篇文章将详细介绍Swift2.2中的一些主要的变化和一些细微的改变,还会展示一些实际的代码例子来让你更快的上手Swift2.2. 1. ++ 和 – 被弃用了 Swift 2.2正式地弃用了++和–操作符,意味着他们仍然可用但当你用到时会得到哦一条警告.弃用一般是完全移除的第一步,因此在这种情况下在Swift 3.0中这两个操作符将会被移除掉. 在使用这两个操作符

(IOS)Swift2.0 Radio 程序分析

本文主要分享下楼主在学习Swift编程过程中,对GitHub上的一个开源项目Swift Radio的研究心得. 项目地址:https://github.com/swiftcodex/Swift-Radio-Pro 一.界面 在这个项目中一共包含了6个界面控制器,其中包含了5个用于分别显示电台频道(Swift Radio).正在播放(Now Playing View).电台信息(Info View Controller).app信息(Menu View Controller)和app特征及联系邮箱

关于Apache mod_rewrite的中文配置、使用和语法介绍(实现URL重写和防盗链功能)

以数据库后台驱动的动态内容的网站,经常会遇到这些的问题: 当在浏览器的地址栏输入一个无效的参数时,会出现数据库的错误提示,这是一个安全的隐患 搜索引擎无法收录你的所有网页 网页的链接地址是一系列的参数,对浏览用户和搜索引擎都不易理解 这些问题都可以通过Apache服务器的一个基本的模块mod_rewrite来解决,默认的安装的Apache就会装有这个模块.要启用这个模块,打开 httpd.conf文件,察看下面的两行是否被屏蔽,第一行是载入mod_rewrite模块,第二行是启用这个模块. Lo

窥探Swift2.0之需要注意的基本运算符和高级运算符

之前更新了一段时间有关Swift语言的博客,连续更新了有6.7篇的样子.期间间更新了一些iOS开发中SQLite.CollectionViewController以及ReactiveCocoa的一些东西.时隔两月,还得继续更新Swift语言的东西不是.在去年翻译<Swift编程入门经典>(Swift1.0版本,基于Xcode6)这本书时,系统的搞了搞Swift语言,接下来的一段时间内打算持续更新一下相关Swift语言的一些东西, 不过现在已经是Swift2.0版本了,区别还是不小的.并且目前在