TIL48 - Capturing List
Capturing List
캡처목록의 정의는 애플 문서에서 다음과 같이 정의합니다.
캡처 목록은 클로저 바디내에서 하나 이상 reference type을 캡처할 때 사용할 규칙입니다.
capturing list의 사용 방법은 클로저 시작때 [ ] in을 작성합니다. 그리고 [ ] 안에 캡쳐할 대상 멤버들을 작성하면 됩니다.!
let closure = { [member1] in
}
let closure = { [member1, member2] in
}
클로저는, 클로저내에 값들을 reference로 갖고 있습니다.
하지만 “Value Type”의 경우에도 reference로 가지고 있지요.
이 Value Type을 기존과 같이 복사해서 가져오고 싶다면 capturing list를 활용하는 게 가능합니다.
그렇다면 Reference Type은 어떻게 활용할 수 있을까요?
Capturing List & Reference Type
결과부터 말씀드리자면, Capturing list에 weak, unowned를 통해서 Reference Type을 가져오면 됩니다!
let closure = { [weak referenceVariable1, weak referenceVariable2] in
}
이러한 방식으로요!
이렇게 참조해서 가져온 변수들과 클로저간에는 순환 참조가 발생할까요?
정답은! “아니요”입니다. weak를 통해서 변수를 가져왔기 때문에, reference count를 증가시키지 않습니다~!
댓글
