XCode Memory Debugging으로 객체간의 참조 관계 한 눈에 파악하기

서론

  • XCode에는 다양한 Debug툴이 있습니다.
  • Memory Debugging을 하는 이유는 크게 세 가지로 나눌 수 있습니다.
  1. 시각적인 메모리 체크
  2. 각 객체의 참조 관계 식별
  3. Strong Reference Cycle 등의 확인
  • 이번 글에서는 Visual Debugging에 속하는 Memory Debugging을 소개하고 그에 맞는 활용 방안까지 소개하려고 합니다.

 

Memory Debugging

실행 하는 법

  • 먼저 콘솔위에 있는 View Debugging 아이콘 오른쪽에 있는 작은 그래프 아이콘을 클릭
  • Debug하고 싶은 상황을 시뮬레이터나 기기에 실행시키고 해당 아이콘을 누름

객체 선택

  • 만약 클릭 하게 되면, 왼쪽에 현재 Heap 영역에 참조 되고 있는 객체들의 목록이 표시
  • 위에서는 NetworkMonitor라는 객체를 클릭해서 해당 객체가 어떤 참조 관계를 가지는지 한 눈에 파악 가능
  • 만약 객체 끼리 순환 참조가 발생한다면, 단 번에 캐치

UIKit과 SwiftUI 화면 객체 참조 관계의 차이점?

  • SwiftUI와 UIKit과 다른 점이 보일 수 있음
  • ViewController는 클래스라서 Memory Debugging을 해보면 해당 객체가 나타나지만, SwiftUI는 그렇지 않음

  • SwiftUI는 PassthroughWindow라는 객체 하나로 모든 화면을 관리하는 것을 예측
  • SwiftUI의 View인 Struct(구조체)는 View를 잠깐 그리고 다시 객체는 사라짐
  • Apple이 입이 닳도록 말한 SwiftUI가 UIKit보다 훨씬 빠르고 효율적인 속도를 제공한다는 것은 아마도 참조 관계를 이런식으로 구성했다는 뜻