스토리보드로 인해 뷰 컨트롤러가 초기화되는 문제
스토리보드로 인해 뷰 컨트롤러가 초기화되는 문제
스토리보드로 인해 의도치 않게 뷰 컨트롤러가 초기화되는 문제
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.