[RxSwift] Debug Memory leaks

Junyoung Park·2022년 8월 31일
0

RxSwift

목록 보기
8/25
post-thumbnail

RxSwift Beginners Episode 8 - Debug memory leaks

Debug Memory leaks

구현 목표

  • RxSwift의 disposeBag을 통해 낭비되는 메모리가 없는지 확인 가능

구현 태스크


1. 디버깅을 할 수 있도록 RxSwift의 디버깅 모드로 진입(Pods → Targets의 RxSwift → Build Settings → Swift Compilers - Custom Flags → Debug), 모든 리소스를 추적하도록 변경
2. 리소스를 사용하는 뷰 컨트롤러 단에서 현재 RxSwift가 사용 중인 리소스의 총량을 출력하기

핵심 코드

private func setFoodImageRx() {
        foodImageNameRelay
            .map({ name in
                print("Resources count \(RxSwift.Resources.total)")
                return UIImage.init(named: name)!
            })
            .bind(to: foodImage
                .rx
                .image)
            .disposed(by: disposeBag)
    }
  • 메인 테이블 뷰에서 테이블 뷰 셀을 선택, 해당 모델 데이터를 통해 바인딩되는 디테일 뷰의 코드를 수정
  • RxSwift.Resources.total을 통해 현재 RxSwift 내의 리소스를 확인 가능
  • disposed(by:)의 유무에 따른 메모리 상태를 확인 가능

구현 화면

  • disposed를 사용하지 않았을 때 메모리 누수가 발생
  • disposed를 사용했을 때 메모리 누수가 발생하지 않고 있음

    컴파일러가 경고하는 대로 disposeBag을 사용해야 RxSwift가 의도한 메모리 누수 방지 코드를 작성할 수 있다. Combine 프레임워크의 메모리 관리 기법인 Cancellable 역시 비슷한 의도로 구현된 것 같은데, 실제 디버깅은 하지 못했기 때문에 관련 내용을 검색해보자.

profile
JUST DO IT

0개의 댓글