Init deinit 관련 문의

기존에 v1 버전으로 daummap framework 사용하고 있었고, 이번에 v2를 적용하기 위해 privacy manifest 적용된 2.10.1 버전을 다운받아 개발중에 있습니다
어느정도 변환을 완료하고 디버깅하면서 작업하려는데 init 단계에서 초기화가 실패하는것 같아서 문의드립니다
샘플코드의 APISampleBaseViewController를 참고하여 BaseMapViewController라는 뷰컨트롤러를 생성했고, appDelegate에서 최초로 호출하는 화면에서 BaseMapViewController를 상속하고 있습니다
따라서 앱을 최초 실행하고 초기화면으로 이동하는중에 init을 수행하게 되는데, 자꾸 init을 두번 진행하고 deinit으로 넘어가서 최초화면을 호출할때 exc_bad_access(thread1 0x0) 에러가 뜨고 있습니다

로그를 보면
init
init
deinit
[K3f] [I][KMSDK] [MTLMapContainer(5290260)] initializeView
이렇게 init 두번 deinit 한번이 찍혀있고 initialView 시도 후에 exc_bad_access 에러가 뜨고 있는 상황입니다

exc_bad_access 에러가 뜨는거는 최초화면으로 넘어갈때 view가 존재해야 하는데, deinit이 되서 view가 존재하지 않기 때문에 null을 참조하기 때문으로 짐작됩니다

appDelegate에서 SDKInitializer 통해 appKey도 주입했습니다
혹시 예상가는 원인이 있을까요?

@api6
앱의 구현 방법이나 전체적인 구성을 확인하기 어려워 구체적인 답변을 드리기는 어렵습니다만 우선 ViewController 및 view 가 생성되는 과정에 대한 확인을 해보셔야 할 것 같습니다.

중단점을 통해 단계별로 확인해보니
앱이 최초실행될때 navigationController를 set하는 과정에서 deinit이 발생합니다
코드로 말씀드리면

let storyboard = UIStorybard.init(name : “Main”, bundel : nil)
let mainNavigation = storyboard.instantiateViewController(withIdentifier : “MainNavigation”) as ? UINavigationController
let mainViewController = storyboard.instantiateViewController(withIdentifier : “MainViewController”)
mainNavigation?.setViewControllers([mainViewController], animated : false)
window?.rootViewController = mainNavigation

MainNavigation은 앱의 최초 진입점이고 MainViewController는 앱의 초기화면으로 설정한 View입니다
MainViewController는 BaseMapViewController를 상속받고 있습니다
디버깅을 해보면
let mainNavigation = storyboard.instantiateViewController(withIdentifier : “MainNavigation”) as ? UINavigationController 을 선언할때 BaseMapViewController에서 init이 한번 발생하고
let mainViewController를 선언할때 init이 한번 더 발생합니다
그리고 mainNavigation?.setViewControllers를 실행할때 deinit이 발생합니다
따라서 window?.rootViewCOntroller를 설정할때는 MainViewController에 세팅되는 view가 없어서 오류가 발생하는 것으로 보입니다
혹시 deinit이 발생하는 이유가 있을까요? deinit은 해당 화면에서 빠져나올때 수행되는 것으로 알고 있는데, 지금 로직에서 화면을 벗어나는 것은 없는 것으로 보입니다…

@api6
아마도 스토리보드에 UINavigationController를 추가하시면서 root view controller를 MainViewController로 지정하셨을 것으로 생각됩니다. 만약 그렇다면 위의 코드대로 수행하면

  1. 스토리보드에서 UINavigationController를 생성하면서 rootView가 함께 자동으로 생성되면서 init이 호출되고,
  2. 새로 MainViewController를 instantiate 하면서 다시 init 이 호출되고,
  3. navigation controller의 viewController들을 지정하면서 두번째로 생성된 viewControler만 넣었기 때문에 최초 생성된 viewController는 reference가 없어 삭제되면서 deinit 이 호출될 겁니다.

exception은 정확히 어디서 발생하는지 확실하지 않아 원인은 알 수 없으나 삭제된 viewController를 참조하는 코드가 있을 것 같습니다.

답변 감사합니다!
일단 근본적인 원인은 저희 회사가 폐쇄망을 사용중이라
방화벽 정책으로 인해 sdk를 통한 통신문제가 있었고,
말씀해주신대로 null 상태인 viewController를 참조하는 부분이 있어서
메모리 관련 이슈가 발생했습니다