<!--
{
  "availability" : [
    "iOS: -",
    "iPadOS: -",
    "macCatalyst: -",
    "tvOS: -",
    "visionOS: -"
  ],
  "documentType" : "symbol",
  "framework" : "UIKit",
  "identifier" : "/documentation/UIKit/UIViewControllerRestoration",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "UIKit"
    ],
    "preciseIdentifier" : "c:objc(pl)UIViewControllerRestoration"
  },
  "title" : "UIViewControllerRestoration"
}
-->

# UIViewControllerRestoration

The methods that objects adopt so that they can act as a restoration class for view controllers during state restoration.

```
@MainActor protocol UIViewControllerRestoration
```

## Overview

To use a class that adopts this protocol, you must assign that class to the [`restorationClass`](/documentation/UIKit/UIViewController/restorationClass) property of one of your app’s view controllers. The method in this protocol should be used to create the view controller, if it doesn’t yet exist, or return an existing view controller object, if one does exist.

## Topics

### Creating the view controller

[`+  viewControllerWithRestorationIdentifierPath:coder:`](/documentation/UIKit/UIViewControllerRestoration/viewController(withRestorationIdentifierPath:coder:))

Requests the view controller that corresponds to the specified identifier information.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)