美文网首页
学习笔记-defer关键字

学习笔记-defer关键字

作者: iPhone贴膜小哥 | 来源:发表于2018-03-22 17:39 被阅读10次
一.引
private func _insert(_ disposable: Disposable) -> Disposable? {
        _lock.lock(); defer { _lock.unlock() }
        if _isDisposed {
            return disposable
        }

        _disposables.append(disposable)

        return nil
    }

上述代码 在RxSwift里DisposeBag.swift 文件的第50行,函数作用不管Rx里它是什么作用,它就是在一个数组里插入一个对象。要保证线程安全加入了_lock(lock是一个RecursiveLock。加入了插入成功的条件,_isDisposed为true的时候。

二.理解

为了体现defer的作用,把defer删掉,代码如下

private func _insert(_ disposable: Disposable) -> Disposable? {
        _lock.lock();
        if _isDisposed {
            _lock.unlock()//---
            return disposable
        }

        _disposables.append(disposable)
        _lock.unlock()//---
        return nil
    }

这显然不够elegant,swift引入了defer关键词,意思是推迟,看个例子

func a{
    print("1")
    b()
    print("4")     
}
 
func b() {
    print("2")
    defer { print("-------") }
    print("3")
}

打印的结果是

 1, 2, 3, -------, 4

打印了2之后并没有打印----分隔符,而直接打印了3,所以,defer延迟到这个方法结束前自动执行。


回归头看引子的代码,这样保证了lock解锁,一个defer实现了我们在OC里的处理方式,很优雅!
同样可以在tableView的beginUpdate()和endUpdate()使用,以及fileOpen等等

3.注意

要注意的是 defer要放在Return之前才会在方法结束前调用

相关文章

  • 学习笔记-defer关键字

    一.引 上述代码 在RxSwift里DisposeBag.swift 文件的第50行,函数作用不管Rx里它是什么作...

  • Go语言defer关键字

    Go语言defer关键字 defer关键字用于延缓函数的执行 只需要在调用普通函数或方法前加上关键字defer,就...

  • Golang学习笔记-defer关键字学习

    defer学习 很多现代的变成语言中都会有defer关键字,Go语言的defer会在当前函数或是方法返回之前执行传...

  • iOS学习笔记-defer关键字

    1.概述 defer关键字是修饰一段函数内任一段代码,使其必须在函数中的其余代码都执行完毕,函数即将结束前调用。可...

  • iOS学习笔记-defer关键字

    1.概述 defer关键字是修饰一段函数内任一段代码,使其必须在函数中的其余代码都执行完毕,函数即将结束前调用。可...

  • swift  defer  关键字 推迟执行

    Swift defer 关键字 延迟执行

  • Golang-defer关键字

    defer关键字 defer是Golang中一个非常重要的关键字,主要是用于注册延迟调用,这些调用在return时...

  • Go语言 defer

    参考文章:深入理解Go语言 defer用于资源的释放,会在函数返回之前进行调用 defer关键字的实现跟go关键字...

  • go defer理解

    golang的defer是怎么工作的?defer在golang里是一个很基础的关键字,在函数内部使用defer声明...

  • Go语言基础(二)

    目录 关键字 defer go的defer用法范例[https://www.jianshu.com/p/7ada9...

网友评论

      本文标题:学习笔记-defer关键字

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