상세 컨텐츠

본문 제목

[iOS][Swift] escaping vs non-escaping 차이

iOS

by caution.dev 2018. 11. 21. 11:27

본문



이스케이핑 vs 논 이스케이핑
함수와 클로저는 1급 객체이다. 변수에 저장하거나, 파라미터로 넘길 수 있다. 우리가 무심코 사용하고 있는 completion handler에서 escaping을 찾아볼 수 있는데, iOS의 많은 API 패턴에서 어떠한 동작이 끝났을 때에 대한 completion handler로 클로저를 넘긴다.
 기본적으로 클로저는 @escaping (annotation) 를 붙이지 않고 함수의 파라미터로 넘겨지면, 함수의 scope 내에서만 동작하는 non-escaping 클로저로 사용된다. 함수의 동작이 끝나면 이 클로저는 더이상 사용되지 않는다.
 Escaping 어노테이션으로 클로저를 넘기면, 해당 함수가 종료되더라도 클로저를 사용할 수 있다. 즉 함수 밖으로 클로저가 탈출할 수 있다. 그래서 특정 함수의 동작이 끝나고 나서 클로저의 작업을 할 수 잇는 completion handelr 를 사용할 수 있다.




https://hcn1519.github.io/articles/2017-09/swift_escaping_closure




관련글 더보기