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
역시 비슷한 의도로 구현된 것 같은데, 실제 디버깅은 하지 못했기 때문에 관련 내용을 검색해보자.