closure_캡쳐 _클래스안 클로저에서 다른 클래스 참조(2회독)

hankyulee·2021년 9월 24일
0

closure

목록 보기
4/7

전에 closure에서 공부하다가 아래 코드를 보았었다.

함수내부에서 클로저를 만들었는데, 그 클로저 내부의 변수들이 기억된다는 결론이었다(즉 캡쳐). 그 값들은 클로저 외부의 값들이다. 이에 함수내부에 있는 클로저말고 함수외부에서 클로저를 만들어보았다.

위를보면, 래퍼런스 캡쳐를 하기때문에 외부 변수를 기억을 하는 결과를 보이고, 아래에서 두번째줄에서 래퍼런스 캡쳐가 잘된다는것을 한번 더 보여준다.

클래스안의 클로저에서 다른 클래스를 참조할때

클래스 내부에서 클로저가 다른 클래스를 참조하는 상황이다.
만들고보니 당연한 말인 코드지만, 처음에는 참조되는 클래스에 nil을 반환해도 deinit이 안될것만 같았다. 그리고 주석처리된 부분은 클로저가 실행될때 init되고 곧바로 deinit된다.

이제 클로저,클래스에서 캡쳐,init,deinit 헤깔리는 부분들이 조금 헤결됐다.

추가) 아래는 순환참조가 발생하지 않는 상황

0개의 댓글