About the UI Preservation Process

Panther·2021년 8월 13일
0

https://developer.apple.com/documentation/uikit/view_controllers/preserving_your_app_s_ui_across_launches/about_the_ui_preservation_process

"Learn how to customize the UIKit state preservation process."

UIKit 상태 보존 프로세스를 커스터마이징 하는 방법에 대해 알아봅니다.

Overview

Figure 1은 인터페이스 보존 과정 동안 발생하는 호출의 연속을 보여주고 있습니다. 앱 딜리게이트에게 앱 상태가 보존되어야 하는지를 물어본 후, UIKit은 현재 앱의 뷰 컨트롤러 계층구조에 있는 객체를 인코딩합니다. 유효한 restorationIdentifier를 갖는 뷰 컨트롤러들만 보존됩니다.

보존 과정은 뷰 컨트롤러 계층구조 흐름을 따라 진행되고, 발견하는 객체를 재귀적으로 인코딩합니다. 과정은 앱 윈도우의 루트 뷰 컨트롤러에서 시작하며, 루트 뷰 컨트롤러는 제공된 아카이브에 갖고 있는 데이터를 쓰는 뷰 컨트롤러입니다. 만약 루트 뷰 컨트롤러의 데이터가 다른 뷰 컨트롤러의 레퍼런스를 갖고 있다면, UIKit은 각각의 새 뷰 컨트롤러가 갖는 데이터를 아카이브에서 분리된 부분으로 인코딩할 것을 각각의 뷰 컨트롤러에게 요청합니다. 이러한 자식 뷰 컨트롤러들은 그들이 갖는 자식들도 인코딩할 것입니다.

UIKit 뷰 컨트롤러는 적합한 때에 자신의 자식 뷰 컨트롤러를 자동으로 인코딩합니다. 커스텀 컨테이너 뷰 컨트롤러를 정의하는 경우 뷰 컨트롤러의 encodeRestorableState(with:) 메소드는 제공된 아카이브에 모든 자식 뷰 컨트롤러를 유사하게 써야(write) 합니다.

Exclude View Controllers from Preservation

뷰 컨트롤러(그리고 이러한 뷰 컨트롤러의 뷰)를 상태 복원 과정으로부터 제외시키는 방법은 두 가지가 있습니다.

  • restorationIdentifier 속성을 nil로 설정합니다.
  • 복원 클래스를 제공하고, viewController(withRestorationIdentifierPath:coder:) 메소드로부터 nil을 반환합니다.

뷰 컨트롤러를 제외시키는 것은 해당 뷰 컨트롤러가 아카이브에 저장되는 것을 방지합니다. 또한, 해당 뷰 컨트롤러의 모든 자식들도 보존되는 것으로부터 제외시킵니다.

Encode Any Object in Your App

상태 복원은 앱의 뷰 및 뷰 컨트롤러에 제한되지 않습니다. UIStateRestoring 프로토콜을 따르는 모든 객체가 복원 아카이브에 포함될 수 있습니다. 예를 들어 앱에 대한 글로벌 설정 데이터를 저장하는 객채에서 이 프로토콜을 채택하는 경우가 있습니다. 이와 같은 방식으로 아카이브에 객체를 추가하려면 아래처럼 수행해야 합니다.

  1. UIApplicationregisterObject(forStateRestoration:restorationIdentifier:) 메소드 호출을 통해 앱이 실행되는 동안 객체를 등록합니다. 예를 들어 설정 객체의 경우 생성 이후 즉시 등록하게 될 것입니다.
  2. encodeRestorableState(with:) 메소드에서 복원 아카이브로 객체를 인코딩합니다. 앱 딜리게이트의 application(_:willEncodeRestorableStateWith:)에 인코딩할 수도 있습니다.

다음 launch 주기 동안 이전 상태로 되돌리기에 충분한 객체라면, 커스텀 객체에 대해 모든 데이터를 인코딩할 수 있습니다. 앱 동작에 중요하지 않은 데이터를 인코딩해야 하고, 다른 방법으로 영구적이어야 하는 데이터를 인코딩하지 않아야 합니다. 예를 들어 앱의 설정 및 launch 주기 사이에서 영구적이어야 하는 사용자 데이터를 인코딩하지 않아야 합니다.

See Also


Process Details

About the UI Restoration Process

UIKit 상태 복원 과정을 커스터마이징 하는 방법에 대해 알아봅니다.

https://developer.apple.com/documentation/uikit/view_controllers/preserving_your_app_s_ui_across_launches/about_the_ui_restoration_process
https://velog.io/@panther222128/About-the-UI-Restoration-Process


0개의 댓글