반응형
캡처리스트 관련 공부 시 도움 되었던 사이틀를 정리해봤습니다.
https://babbab2.tistory.com/83
Swift) 클로저(Closure) 정복하기(3/3) - 클로저와 ARC
안녕하세요 :) 소들입니다! 이번 포스팅은 클로저 정복하기 마지막 편!!! 메모리나 ARC에 대한 사전 지식이 없으면 조금 이해하기 어려울 수 있으니, 메모리 관련 포스팅을 먼저 보고 오심을 추천
babbab2.tistory.com
클로저 캡쳐에 대해서 (about closure capture)
출처 : <https://docs.swift.org/swift-book/LanguageGuide/Closures.html클로저 캡쳐란? 클로저 캡쳐란 매개변수나 지역변수가 아닌 주변 외부의 context를 사용하기 위해 주변 외부의 context를 참조하
velog.io
https://showcove.medium.com/swift-closure-capture-lists-1-277d2e60dc2d
정리
Capture List을 사용하면 캡쳐된 변수는 클로저가 생성되는 시점에 평가되어집니다.
Captured variables are evaluated on execution : 캡쳐된 변수는 클로저가 실행될 때 평가되어집니다.
아래와 같은 경우 self는 먼저 deinit된 후 “—“를 출력한다
{ [weak self] _ in
//guard let `self` = weak_self else { return }
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3, execute: {
print("5초 후 실행")
let category_text = self?.lbl_category.text ?? "--"
print("텍스트: \(category_text)")
})
}
guard let으로 self를 다시 한 번 강하게 참조하게되므로 아래 5초후 로직이 끝난 후에야 self가 deint된다
{ [weak self] _ in
guard let `self` = weak_self else { return }
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3, execute: {
print("5초 후 실행")
let category_text = self?.lbl_category.text ?? "--"
print("텍스트: \(category_text)")
})
}
print("참조수 확인: \(CFGetRetainCount(self))")
반응형