반응형
캡처리스트 관련 공부 시 도움 되었던 사이틀를 정리해봤습니다.
https://babbab2.tistory.com/83
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))")
반응형