Daily iOS
메모리·ARC

클로저 캡처 원리

클로저가 외부 변수를 캡처할 때 실제로 메모리에서 무슨 일이 일어나나요? 캡처 리스트 [x]를 쓸 때와 안 쓸 때의 차이를 아래 코드 결과로 설명해 주세요.

var count = 0
let a = { print(count) }
let b = { [count] in print(count) }
count = 10
a(); b()
면접관은 이 답을 어떻게 들을까요? 넘어갈지, 더 물어볼지, 떨어뜨릴지 알려 주고, 걸리는 문장은 콕 집어 줘요. 점수는 그대로예요.
짧은 답 보기

캡처 리스트 없이 var를 쓰면 변수 자체가 힙 박스로 승격되어 클로저와 공유되므로 a()는 10, [count]는 생성 시점 값을 복사하므로 b()는 0.

받은 질문 공유