티스토리 뷰

순환참조란?

  • 두 개 이상의 인스턴스가 서로에 대한 Strong Reference(강한 참조)를 가지고 있는 상태
  • 순환 참조가 발생하게 되면 서로에 대한 참조가 해제되지 않기 때문에 메모리에서 유지되며 이로 인해 메모리 릭이 발생하게 된다.

 

  • 왼쪽 그림에서 변수 a, b 가 각각 Class A의 인스턴스와 Class B 의 인스턴스를 참조하고 있다.
  • 오른쪽 그림에서 변수 a, b 에게 nil을 할당하여 참조를 제거하였지만 두 인스턴스는 여전히 ARC가 0이 되지 못하여 메모리에 남아 있다.

 

해결 방안은?

  • 이러한 순환 참조를 해결하기 위해 weak, unowned reference (약한, 무소유 참조) 가 사용된다.

 

weak, unowned 참조

  • weak, unowned 참조는 모두 인스턴스에 대한 강한 참조를 유지하지 않는다. -> 참조하는 객체의 ARC를 증가시키지 않는다.
  • weak 참조의 경우 참조하던 인스턴스가 메모리에서 해제된 경우, 자동으로 nil이 할당된다 → weak는 옵셔널 타입의 변수 여야함
  • unowned 참조의 경우 참조하던 인스턴스가 메모리에서 해제된다면 해제된 메모리 주소값을 계속 들고 있으므로 Runtime Error의 위험이 있다. → 참조 대상인 인스턴스가 수명이 더 길어야한다
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함