Post

스토리보드로 인해 뷰 컨트롤러가 초기화되는 문제

스토리보드로 인해 뷰 컨트롤러가 초기화되는 문제

스토리보드로 인해 의도치 않게 뷰 컨트롤러가 초기화되는 문제

1. 문제 상황

로그인 상태에 따라 LoginViewController 또는 MainViewControllerrootViewController로 설정하는 코드가 있음.

그러나 로그인 상태가 false일 때도 MainViewController가 초기화되었다가 해제되는 문제가 발생함.

2. 원인 분석

  • MainViewControllerrootViewController로 설정되지 않았는데도 init()이 호출됨.
  • deinit을 추가해보니 MainViewController가 생성되었다가 곧바로 해제됨을 확인.
  • 코드 상에서 MainViewController()를 직접 호출하는 부분이 없음.
  • 스토리보드에서 MainViewController가 Initial View Controller로 설정되어 있어서, 앱 실행 시 자동으로 인스턴스화됨을 확인.

3. 해결 방법

  1. 스토리보드에서 MainViewController가 Initial View Controller로 설정되어 있는지 확인
    • Main.storyboard에서 LoginViewController를 Initial View Controller로 변경.
  2. 불필요한 인스턴스 생성 방지
    • SceneDelegate.swift에서 rootViewController를 명확하게 설정하는 코드 추가.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
     swift
     복사편집
     if isLoggedIn {
         window?.rootViewController = MainViewController()
     } else {
         window?.rootViewController = LoginViewController()
     }
     window?.makeKeyAndVisible()
        
    
  3. 코드 내에서 UIStoryboard.instantiateViewController(withIdentifier:)MainViewController를 생성하는 부분이 있는지 확인하고 제거
    • Cmd + Shift + FinstantiateViewController(withIdentifier:)를 검색하여 불필요한 MainViewController 초기화 코드 제거.

4. 결과

  • 로그인 상태가 false일 때 불필요한 MainViewController 초기화가 발생하지 않음.
  • MainViewController는 로그인 성공 후에만 생성됨.
  • 메모리 낭비 및 불필요한 뷰컨트롤러 초기화 문제 해결.
This post is licensed under CC BY 4.0 by the author.