LifeCycle

조재민·2023년 8월 30일
0
post-thumbnail

LifeCycle

뷰나 앱의 생명주기를 나타내는 여러 이벤트나 단계

  1. init()
  • UIViewController 객체 생성
class MyViewController: UIViewController {
    
    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        // 초기화 메서드에서 필요한 작업 수행
    }
}
class MyViewController: UIViewController {
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        // 초기화 메서드에서 필요한 작업 수행
    }
}
  1. loadView()
  • 컨트롤러의 뷰 계층 구조 생성
class MyViewController: UIViewController {

	override func loadView() {
        // 뷰를 직접 생성하여 할당
        self.view = UIView()
    }
}
  1. viewDidLoad()
  • 뷰 계층 구조가 메모리에 로드되었으며, 초기화 작업을 수행
class MyViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // 뷰에 대한 추가 구성 작업 수행
    }
}
    
  1. viewWillAppear()
  • 뷰가 화면에 나타나기 직전에 호출, 뷰를 업데이트하거나 애니메이션 시작
class MyViewController: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        // 뷰가 나타나기 전에 수행할 작업 수행
    }
}
    
  1. viewDidAppear()
  • 뷰가 화면에 나타나면 호출, 애니메이션을 종료하거나 뷰의 상태를 업데이트
class MyViewController: UIViewController {

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        // 뷰가 나타난 후에 수행할 작업 수행
    }
}
    
  1. viewWillDisappear()
  • 뷰가 화면에서 사라지기 직전에 호출, 데이터를 저장하거나 애니메이션을 시작
class MyViewController: UIViewController {

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        // 뷰가 사라지기 전에 수행할 작업 수행
    }
}
    
  1. viewDidDisappear()
  • 뷰가 화면에서 사라지면 호출, 애니메이션을 종료하거나 뷰의 상태를 업데이트
class MyViewController: UIViewController {

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        // 뷰가 사라진 후에 수행할 작업 수행
    }
}
    
  1. deinit
  • UIViewController 객체가 메모리에서 해제
class MyViewController: UIViewController {

	 deinit {
        // 뷰 컨트롤러가 메모리에서 해제되기 전에 수행할 작업 수행
    }
}

App LifeCycle

  • 앱의 상태나 그에 따른 이벤트를 관리

App 상태

  1. Not Running : 실행되지 않거나 종료된 상태

  2. InActive: 앱이 Foreground 상태로 돌아가지만, 이벤트는 받지 않는 상태, 잠시 존재하는 상태
    → 아래에서 위로 스와이프 하는 순간 InActive 상태가 됨

  3. Active: 일반적으로 앱이 돌아가는 상태 (이벤트를 받는 단계)

  4. Background: 앱이 Suspended(유예 상태) 상태로 진입하기 전 거치는 상태
    → 보통 Suspended 상태(음악, 통화 앱 같은 경우는 background)

  5. 앱이 Background 상태에 있지만, 아무 코드도 실행하지 않는 상태, 시스템이 임의로 Background 상태의 앱을 Suspended 상태로 만든다.(리소스 해제)
    Not Running 과 일반적으로 동일

UIApplicationDelegate

  • 주요 메서드
  1. application(_:didFinishLaunchingWithOptions:): 앱이 처음 시작될 때 호출

  2. applicationDidBecomeActive(_:): 앱이 활성 상태가 될 때 호출

  3. applicationWillResignActive(_:): 앱이 비활성 상태가 되기 직전에 호출

  4. applicationDidEnterBackground(_:): 앱이 백그라운드 상태가 될 때 호출

  5. applicationWillEnterForeground(_:): 앱이 백그라운드에서 나와 전면으로 올 때 호출. 그러나 아직 활성 상태가 아님.

  6. applicationWillTerminate(_:): 앱이 종료되기 직전에 호출

App Life Cycle

  1. 앱이 실행됩니다.
  • 사용자가 앱을 탭하여 실행합니다.
  1. UIApplication 객체가 생성.
  • 앱의 진입점인 main.swift에서 @main 함수가 호출되어 UIApplication 객체가 생성됩니다.
  1. AppDelegate 객체가 생성.
  • UIApplication 객체는 AppDelegate 객체를 delegate로 설정.
  • AppDelegateUIResponder, UIApplicationDelegate를 상속 및 참조
  1. AppDelegate 객체의 application(_:didFinishLaunchingWithOptions:) 메서드가 호출
  • 앱이 실행되면, UIApplication 객체는 AppDelegate 객체의 application(_:didFinishLaunchingWithOptions:) 메서드를 호출. 이 메서드는 앱의 초기화를 수행.
  1. Root view controller가 생성됩니다.
  • AppDelegate 객체는 UIWindow를 생성하고, 이 윈도우에 Root view controller를 할당합니다.
  1. Root view controllerview가 생성됩니다.
  • Root view controller의 view는 로드됩니다. 이때 viewDidLoad() 메서드가 호출됩니다.
  • UIViewController의 Life cycle에 따라 동작
  1. 사용자가 앱을 조작합니다.
  • 앱의 사용자 인터페이스에서 사용자의 입력에 따라 함수가 호출.
  1. 앱이 Background 상태로 전환됩니다.
  • 앱이 Background 상태로 전환되면, applicationWillResignActive()함수가 호출. 이 함수는 앱이 Background로 전환되기 전에 실행해야 하는 작업을 수행합니다.
  1. 앱이 Foreground 상태로 전환됩니다.
  • 앱이 Foreground 상태로 전환되면, applicationDidBecomeActive() 함수가 호출됩니다. 이 함수는 앱이 Foreground로 전환된 후 실행해야 하는 작업을 수행합니다.
  1. 앱이 종료됩니다.
  • applicationWillTerminate()함수가 호출됩니다. 이 함수는 앱이 종료될때 수행
profile
“누군가는 너를 사랑하고 있다.”

0개의 댓글

관련 채용 정보