iOS 생명주기 완벽 이해: 앱 실행부터 종료까지 단계별 정리

iOS 생명주기란?

“iOS 생명주기(iOS Lifecycle)”는 앱이 실행되고 종료될 때까지의 흐름을 의미합니다.
이 흐름을 이해하면 앱이 언제 메모리를 할당하거나 해제해야 하는지,
또 화면이 언제 그려지고 사라지는지를 명확히 파악할 수 있습니다.


앱 전체 생명주기 (AppDelegate / SceneDelegate)

앱 단위에서의 생명주기는 다음 5단계로 나뉩니다.

단계상태설명
1Not Running앱이 실행되지 않은 상태
2Inactive앱이 실행 중이지만 사용자 입력 불가 (전화 수신 등)
3Active앱이 실행 중이며 입력 가능 (정상 상태)
4Background홈 버튼 등으로 백그라운드 전환된 상태
5SuspendedCPU 미사용, 메모리만 유지되는 상태

주요 콜백 메서드:

func applicationDidBecomeActive(_ application: UIApplication)
func applicationWillResignActive(_ application: UIApplication)
func applicationDidEnterBackground(_ application: UIApplication)
func applicationWillEnterForeground(_ application: UIApplication)
func applicationWillTerminate(_ application: UIApplication)

SceneDelegate 역할 (iOS 13 이후)

iOS 13부터 SceneDelegate가 도입되어 멀티 윈도우 환경을 지원합니다.
즉, iPad나 iPhone에서 여러 인스턴스의 앱 화면(Scene)을 관리할 수 있습니다.

func sceneWillEnterForeground(_ scene: UIScene)
func sceneDidEnterBackground(_ scene: UIScene)

AppDelegate는 앱 전체 환경 설정, SceneDelegate는 화면 단위 상태 관리를 담당합니다.


ViewController 생명주기 (UIViewController Lifecycle)

이제 말씀하신 viewWillAppear, viewDidDisappear 등은 바로 여기입니다.
화면(ViewController)의 생명주기는 다음 순서로 진행됩니다.

순서메서드설명
1viewDidLoad()뷰가 메모리에 로드될 때 (한 번만 호출됨)
2viewWillAppear(_:)화면이 나타나기 직전
3viewDidAppear(_:)화면이 완전히 나타난 후
4viewWillDisappear(_:)화면이 사라지기 직전
5viewDidDisappear(_:)화면이 완전히 사라진 후

🔹 viewDidLoad(): 데이터 초기화, UI 설정
🔹 viewWillAppear(): 화면 갱신, 애니메이션 준비
🔹 viewDidDisappear(): 자원 해제, 타이머 정리 등

override func viewDidLoad() {
    super.viewDidLoad()
    print("뷰가 메모리에 로드됨")
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    print("화면이 곧 나타남")
}

override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)
    print("화면이 완전히 사라짐")
}

생명주기 이해의 중요성

  1. 메모리 관리: 뷰가 사라질 때 불필요한 객체 해제
  2. 데이터 갱신: 화면이 나타날 때 최신 데이터 반영
  3. 애니메이션 제어: 전환 타이밍 조절로 부드러운 UI 구현
  4. 성능 최적화: 필요 시점에만 네트워크 호출 및 연산 수행

함께 보면 좋은 글


정리

iOS 생명주기는 **앱 전체(AppDelegate / SceneDelegate)**와 화면 단위(ViewController) 두 영역으로 나뉩니다.
각 단계의 호출 시점을 이해하면, 앱이 더 안정적이고 효율적으로 동작합니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤