스토리보드로 인해 뷰 컨트롤러가 초기화되는 문제
스토리보드로 인해 뷰 컨트롤러가 초기화되는 문제
스토리보드로 인해 의도치 않게 뷰 컨트롤러가 초기화되는 문제
1. 문제 상황
로그인 상태에 따라 LoginViewController
또는 MainViewController
를 rootViewController
로 설정하는 코드가 있음.
그러나 로그인 상태가 false
일 때도 MainViewController
가 초기화되었다가 해제되는 문제가 발생함.
2. 원인 분석
MainViewController
가rootViewController
로 설정되지 않았는데도init()
이 호출됨.deinit
을 추가해보니MainViewController
가 생성되었다가 곧바로 해제됨을 확인.- 코드 상에서
MainViewController()
를 직접 호출하는 부분이 없음. - 스토리보드에서
MainViewController
가 Initial View Controller로 설정되어 있어서, 앱 실행 시 자동으로 인스턴스화됨을 확인.
3. 해결 방법
- 스토리보드에서
MainViewController
가 Initial View Controller로 설정되어 있는지 확인Main.storyboard
에서LoginViewController
를 Initial View Controller로 변경.
- 불필요한 인스턴스 생성 방지
SceneDelegate.swift
에서rootViewController
를 명확하게 설정하는 코드 추가.
1 2 3 4 5 6 7 8 9
swift 복사편집 if isLoggedIn { window?.rootViewController = MainViewController() } else { window?.rootViewController = LoginViewController() } window?.makeKeyAndVisible()
- 코드 내에서
UIStoryboard.instantiateViewController(withIdentifier:)
로MainViewController
를 생성하는 부분이 있는지 확인하고 제거Cmd + Shift + F
로instantiateViewController(withIdentifier:)
를 검색하여 불필요한MainViewController
초기화 코드 제거.
4. 결과
- 로그인 상태가
false
일 때 불필요한MainViewController
초기화가 발생하지 않음. MainViewController
는 로그인 성공 후에만 생성됨.- 메모리 낭비 및 불필요한 뷰컨트롤러 초기화 문제 해결.
This post is licensed under CC BY 4.0 by the author.