개발하는 동글 :]

[TIL],[Swift],[@escaping] 본문

카테고리 없음

[TIL],[Swift],[@escaping]

동글하다 2023. 8. 10. 13:34

Why?

api를 사용하여 데이터를 받아오는 과정 중 잘 이해가 되지 않는 문법을 발견함

TIL

@escaping ? 

클로저의 실행이 본래 함수를 벗어나서도 실행되도록 하는 키워드

Non-Escaping Closure

func nonEscaping(closure: () -> () ){
    closure()
}

클로저가 실행되는 순서

  1. 클로저가 함수의 인자로 전달됨
  2. 함수 안에서 closure 가 실행됨
  3. 함수가 값을 반환하고 종료됨

메모리

함수내에서 단순하게 실행하고 종료하기 때문에 클로저를  힙영역이 아닌 일반 스택영역에 저장

Escaping Closure

class ViewModel {
    var completionhandler: (() -> Void)? = nil
    
    func fetchData(completion: @escaping () -> Void) {
        completionhandler = completion
    }
}

클로저가 실행되는 순서

  1. 클로저가 함수의 인자로 전달됨
  2. 클로저 completion이 completionhandler 변수에 저장됨
  3. fetchData() 함수가 값을 반환하고 종료됨
  4. 클로저 completion은 아직 실행되지 않음

메모리

클로저가 함수를 벗어나서도 사용하여 오랫동안 유지할 필요가 있기 때문에 힙영역에 저장된다.

 

Reference

https://jusung.github.io/Escaping-Closure/