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이 호출.