본문 바로가기
iOS/설명

[iOS] 앱 실행 시 UI Restoration Process

by Sky Titan 2022. 6. 6.
728x90

UI Restoration Process

 

Apple Developer Documentation

 

developer.apple.com

  • UI Restoration은 app 런치 이후 앱을 초기화하는 과정에서 일어난다.
  • app delegate의 application(_:shouldRestoreApplicationState:) 메서드가 true를 반환한다면, UI Restoration을 진행하게 된다.

  1. 먼저 view controller 오브젝트들을 생성한다.
  2. 해당 object들의 state를 복원하고 decode한다.
  3. 복원이 끝나면, UIKit이 application(_:didFinishLaunchingWithOptions:)메서드를 호출한다.

 

ViewController들의 재생성

  • 복원 중에, UIKit은 view controller 오브젝트들을 생성하고 배치한다.
  • UIKit은 아래와 같은 과정을 거쳐서 view controller들을 재생성한다.
   
view controller의 restorating class 요청 - view controller에 'restorationClass'라는 프로퍼티를 할당함으로써 어떤 view controller
를 생성해야될지 명시할 수 있다.

- 복원 중, UIKit은 restoration class의 viewController(withRestorationIdentifierPath:coder:) 메서드를 호출해서 view controller의 새로운 instance를 요청할 수 있다.
(만약 restoration class가 다른 class의 인스턴스를 반환하면, view controller의 decodeRestorableState(with:) 메서드가 호출 안된다.)
app delegate 요청 - 만약 view controller가 restoration class를 가지고 있지 않다면, UIKit은 app delegate의 application(_:viewControllerWithRestorationIdentiferPath:coder:) 메서드를 호출하게 된다.

- 만약 해당 메서드가 nil을 반환한다면, UIKit은 계속해서 탐색을 진행한다.
존재하는 object 확인 - UIKit은 정확히 같은 restoration path에 이미 생성된 view controller가 있는지 확인한다.
storyboard로 부터 view controller를 초기화한다. - 만약 계속 view controller를 찾지 못한다면, UIKit은 자동으로 app의 storyboard로부터 view controller를 생성해 초기화한다.
import UIKit

class SecondViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
  
}
extension SecondViewController: UIViewControllerRestoration {
    static func viewController(withRestorationIdentifierPath identifierComponents: [String], coder: NSCoder) -> UIViewController? {
        let vc = SecondViewController()
        vc.restorationClass = SecondViewController.self
        return vc
    }
}

 

728x90

댓글