[iOS] Strong Reference Cycle

RudinP·2024년 4월 2일
0

Study

목록 보기
216/226

강한 참조 사이클


이러한 클래스가 있다고 하자.

  • 그러나, 접근 가능한 수단이었던 person과 rentedCar이 nil이 되었기 때문에 여전히 남아있는 person.car과 car.lesse에는 접근할 수 없고, 메모리 누수 현상이 발생한다.
  • 이를 Strong Reference Cycle, 또는 참조 사이클이라고 부른다.
  • ARC는 이를 자동으로 해결하지 못한다.

강한 참조 사이클 해결 방법

  • 두가지 모두 강한 참조를 제거하는 방식이다.
  • 참조 카운트를 증가시키거나 감소시키는 방식이 아니다.
  • 참조를 통해서 인스턴스에 접근만 하는 것.
  • 다른 객체가 소유권을 포기하고 참조 카운트가 0이되면 weak, unowned reference인 객체가 사용중이더라도 소멸된다.

Weak Reference

  • 대상을 소유하지 않으며 접근만 하는 방식
  • 참조 카운트를 바꾸지 않는다.
  • 접근하고 있는 대상이 소멸되면 자동으로 nil로 초기화
  • 인스턴스의 생명주기가 소유자와 같거나 짧을 때 주로 사용하는 방식
weak var name: Type?

  • lesse를 weak Reference로 변경 시 참조 사이클을 해결함

Unowned Reference

비소유 참조

  • 대상을 소유하지 않음
  • 보통은 타입이 옵셔널
    • non-optional로 선언해도 됨
  • weak과 다르게 참조 대상이 사라져도 nil로 초기화되지 않는다.
    • 따라서 소멸 후 접근하면 크래시가 발생하니 유의하자.
  • 꼭 필요한 경우에만 사용하는게 권장되며, 보통은 weak을 사용하자.
unowned var name: Type //보통은 넌옵셔널로 선언
unowned var name: Type?

profile
곰을 좋아합니다. <a href = "https://github.com/RudinP">github</a>

0개의 댓글