closure_함수 내에서 클래스 캡처- 메모리 해제

hankyulee·2021년 9월 25일
0

closure

목록 보기
5/7

클로저는 아직 공부가 부족한가보다. 할 수록 깨닫는게 생긴다. 틀린게 있을 수 있습니다 가볍게 봐주세요!

  • (95번째줄~107번째줄만 참고.)
  • makeClassReference 함수내에서 클로저의 외부에서 인스턴스를 선언하고 클로저 내에서 인스턴스를 참조했다. 함수를 선언해 클로저를 상수에 담고 클로저를 실행시키면, 인스턴스가 메모리에 올라가고 해제되지않는것을 출력을 통해 알 수 있다. 이는 클로저에서 강한참조를 했기때문이다.
  • hacking with swift에 좋은 표현이 있다: it gets used inside the closure, which means Swift will automatically make sure it stays alive for as long as the closure exists somewhere, even after the function has returned. This is strong capturing in action.
  • 따라서 sample = nil 할 경우 Deinit이 된다.
  • 일반 함수의 경우 함수가 return 되면 참조가 해제된다.
  • 클로저 내부에서 인스턴스를 선언하면 바로 deinit된다.
  • 전역변수에 인스턴스를 할당하고 클로저에서 래퍼런스 카운트를 올리면, 클로저에 nil을 넣어도 래퍼런스 카운트가 0이 아니기때문에 deinit되지 않는다. 따라서 classRef를 해제시켜야한다.

0개의 댓글