학습노트-defer 키워드

1453 단어
하나.인용하다
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에 놓기 전에 방법이 끝나기 전에 호출해야 한다는 것이다

좋은 웹페이지 즐겨찾기