[Swift学习]莫名其妙的标记之@noescape

Swift 中经常遇到一些不熟悉的关键字, 例如@autoclosure, @noescape...等等, 为什么要加这样的关键字, 我自己写方法的时候什么时候要加, 什么时候不加, 都是应该考虑的问题, 所以打算写一系列文章来介绍一下这些关键字.

@noescape

@noescape 用来标记一个闭包, 用法如下

func hostFunc(@noescape closure: () -> ()) -> Void

@noescape字面意思是无法逃脱. 在上例中, closure@noescape修饰, 则声明 closure 的生命周期不能超过 hostFunc, 并且, closure不能被hostFunc中的其他闭包捕获(也就是强持有).

用例
func hostFunc(@noescape closure: () -> ()) -> Void {
    //以下编译出错, closure 被修饰后, 不能被其他异步线程捕获
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
        closure()
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 以下翻译自Apple官方文档,结合自己的理解记录下来。翻译基于 swift 3.0.1 原文地址 Closure...
    艺术农阅读 1,605评论 0 3
  • 1、范型范型所解决的问题 函数、方法、类型:类,结构体,枚举,元组类型,协议参数,返回值,成员函数参数,成员属性类...
    我是小胡胡123阅读 863评论 0 1
  • 86.复合 Cases 共享相同代码块的多个switch 分支 分支可以合并, 写在分支后用逗号分开。如果任何模式...
    无沣阅读 1,438评论 1 5
  • 太阳没有升起来。 他生了火,从屋子里出去。 火,火,火!有人喊。 人们跟着火把后面,走在黑暗里。 一簇火焰是不够的...
    补知阅读 314评论 0 3
  • 幸福就是我想要的不多不少,刚好我得到的也不多不少。 痛苦就是我想要的太多,得到的太少。
    君晓墨阅读 183评论 0 0