-
Notifications
You must be signed in to change notification settings - Fork 1
[ARC] dismiss 혹은 popViewController 호출 이후에도 메모리 할당이 해제되지 않는 이유?
Ari edited this page Jul 24, 2022
·
1 revision
Coordinator 패턴을 활용하여 화면 제어를 하고 있었다. 그러다가 간혹 dismiss, popViewController를 시도하면 해당 뷰 컨트롤러가 메모리에서 사라져야 하는데, 죽지않고 살아남아있는 경우가 발생하는 걸 발견해버렸다. 이를 해결하려고 방법을 찾아보았다
-
첫번째 시도
- 뷰가 사라질 때 ViewController가 가지고 있는 ViewModel을 nil처리를 해주어보았다.
- 하지만 효과는 없었다. 이 문제가 아닌 것 같았다.
-
두번째 시도
- 방법을 모색하던 와중에, 해당 내용에 대한 stackoverflow 질문 글을 찾게 되었다.
- 뷰 컨트롤러를 닫거나, 팝할 때 강력한 참조를 만들지 않은 경우에만 할당이 해제된다는 답변이 있었다.
따라서 이 답변을 참고하여, 문제가 발생하는 뷰 컨트롤러에 강한 참조를 하고 있는 부분이 있나 체크를 해보았다.
위에서 말했던 문제가 발생하던 뷰 컨트롤러의 수가 적지 않았다. 살펴보니 대부분 바인딩 처리해주는 부분에서 옵저버블을 구독하는 시점에 self를 약한 참조로 사용하지 않고 강한 참조로 사용하던 부분 때문에 발생하던 문제였다.
-
해결 방법
- ViewController 내부에서 self를 사용하는 구간을 모두 약한 참조를 하도록 바꾸어주었다.
- 그리고 viewModel을 뷰 컨트롤러가 소유했던 방향을
bind(to:)
라는 메소드로 변경하여파라미터로 뷰모델을 전달받아 바인딩 처리
를 하도록 구조를 수정해주었다.
- [성능] 필터링 걸고 아이템을 체크했을 때 앱의 반응속도가 느려지는 현상
- [RxSwift] Cell에 ViewModel을 할당하여 바인딩 처리할 때 주의해야할 점
- [ARC] dismiss 혹은 popViewController 호출 이후에도 메모리 할당이 해제되지 않는 이유?
- [UIKit] CollectionView의 높이를 콘텐츠 높이에 따라 동적으로 레이아웃 설정하는 법
- [UIKit] UICollectionView의 Cell Dynamic Size 지정해주기
- [UIKit] Navagation title을 줄바꿈 할 수는 없을까?
- [UIKit] Progress Bar의 높이를 변경하는 방법
- [UIKit] 왜 네비게이션 타이틀이 Large가 아닌 small로 나오는 걸까?
- [Xcode] LaunchScreen.storyboard에 배경색을 커스텀색상을 사용했는데, 다크모드가 작동하지 않는 현상
- [Xcode] 실제 디바이스로 앱을 테스트 하던 도중 발생한 문제