728x90
UI Restoration Process
- UI Restoration은 app 런치 이후 앱을 초기화하는 과정에서 일어난다.
- app delegate의 application(_:shouldRestoreApplicationState:) 메서드가 true를 반환한다면, UI Restoration을 진행하게 된다.
- 먼저 view controller 오브젝트들을 생성한다.
- 해당 object들의 state를 복원하고 decode한다.
- 복원이 끝나면, 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
'iOS > 설명' 카테고리의 다른 글
[iOS] application(_:open:options:) 의 return 값은 어디서 사용되는가? (0) | 2022.06.25 |
---|---|
[iOS] 상황별 app life cycle 메서드 호출 순서 (0) | 2022.06.06 |
[iOS] App launch Sequence (0) | 2022.06.06 |
[iOS] CFGetRetainCount (0) | 2022.06.02 |
[iOS] Background Modes의 Location Updates (0) | 2022.05.30 |
댓글