美文网首页
Swift: @escaping 和 @noescaping 是

Swift: @escaping 和 @noescaping 是

作者: 一欧Yiou | 来源:发表于2019-01-09 14:48 被阅读6次

    @noescaping: 非逃逸闭包类型
    @escaping: 逃逸闭包类型

    Swift 3.0 之后,传递闭包到函数中的时候,系统会默认为非逃逸闭包类(NonescapingClosures)@noescaping,逃逸闭包在闭包前要添加@escaping关键字。

    闭包只有在函数中做参数时才会区分逃逸闭包和非逃逸闭包。

    从生命周期看两者区别:

    非逃逸闭包的生命周期与函数相同:

    • 1,把闭包作为参数传给函数;
    • 2,函数中调用闭包;
    • 3,退出函数。结束

    从生命周期看两者区别:

    • 1,闭包作为参数传递给函数;
    • 2,退出函数;
    • 3,闭包被调用,闭包生命周期结束
    //这是一个非逃逸闭包,闭包doBlock 在函数执行的时候就调用了 
    func methodName(block:(() -> Void)) {
        block()
    }
    
    //这是一个逃逸闭包,闭包block 到了另一个作用域,跟当前函数是异步的,逃逸闭包必须用@escaping来修饰。因为默认是 @noescaping
    func methodName(block:@escaping (() -> Void)) {
        DispatchQueue.main.async {
            block()
        }
    }
    

    非逃逸闭包在闭包里调用对象的时候,是不用写self的

    相关文章

      网友评论

          本文标题:Swift: @escaping 和 @noescaping 是

          本文链接:https://www.haomeiwen.com/subject/btlvrqtx.html