[UIKit] Naver Map을 사용한 뷰 컨트롤러에서 deinit이 호출되지 않는다면

박상우·2023년 12월 12일
0

UIKit

목록 보기
8/8
post-custom-banner

Naver Map을 활용한 지도 페이지가 소멸되지 않는 문제 해결 과정을 담은 글입니다.

문제

맵 뷰컨트롤러를 popVC 시 deinit이 간헐적으로 호출되지 않는 문제가 발생.

문제 원인 및 해결

검색 결과가 없을 때는 deinit이 호출 되고 결과 있을 때만 deinit이 호출되지 않는 것을 확인.

검색 결과가 있을 때 만들어진 객체가 강한 참조를 일으키고 있을 것이라 판단.

지도 뷰 컨트롤러를 popVC할 때 네이버 지도의 마커 객체가 계속 남아있어 뷰 컨트롤러가 메모리에서 해제되지 않고 잔존.

    // 마커를 지도에 추가하는 코드
    marker.mapView = searchMapUIView.searchMapView.mapView

위의 코드에서 marker가 생성됐을 때 각각의 마커들이 Naver Map을 참조하고 있어 강한 참조가 발생하고 있던 것.

    func removeAllMarkers() {
        for marker in activeMarkers {
            marker.mapView = nil
        }
        activeMarkers.removeAll()
    }

popVC하기 직전 생성된 모든 마커를 marker.mapView = nil 로 처리하여 마커 오버레이와 지도 뷰 간의 참조를 전부 해제하니 정상적으로 deinit이 호출.

profile
코딩으로 세계정복👑
post-custom-banner

0개의 댓글