<!--
{
  "availability" : [
    "iOS: 18.0.0 -",
    "iPadOS: 18.0.0 -",
    "tvOS: 18.0.0 -",
    "visionOS: 2.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "UIKit",
  "identifier" : "/documentation/UIKit/UIUpdateLink",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "UIKit"
    ],
    "preciseIdentifier" : "c:objc(cs)UIUpdateLink"
  },
  "title" : "UIUpdateLink"
}
-->

# UIUpdateLink

An object you use to observe, participate in, and affect the UI update process.

```
@MainActor class UIUpdateLink
```

## Overview

With a *UI update link*, you can follow the progress of each UI update and express preferences about how those updates happen. Use a UI update link when you need precise and predictable control over the UI update process.

There are multiple use cases for [`UIUpdateLink`](/documentation/UIKit/UIUpdateLink), including:

- To monitor when UI updates occur and synchronize your drawing code with each update, similar to how you might use <doc://com.apple.documentation/documentation/QuartzCore/CADisplayLink>.
- To influence how UI updates occur by expressing preferences to the system, such as requesting continuous UI updates, immediate rendering of frames, and more.
- To specify precisely at which point in the UI update process to perform certain actions.
- To implement support for low-latency input, such as a custom low-latency drawing implementation for a pencil-drawing app.

To create a UI update link, you associate it with a window or a view. The UI update link activates automatically when you add the view to a visible window, and deactivates when you remove the view from it. If the view moves from one display to another, [`UIUpdateLink`](/documentation/UIKit/UIUpdateLink) adjusts to the timing of the new display automatically.

```swift
// Monitor UI updates for a specific view.
let updateLink = UIUpdateLink(view: view)
updateLink.isEnabled = true

// Influence the UI update process by requesting continuous UI updates.
updateLink.requiresContinuousUpdates = true

// Specify one or more actions to perform for each UI update.
// Add an action to the `.beforeCADisplayLinkDispatch` phase, by default.
updateLink.addAction() { link, info in 
    // Code that runs each UI update, after processing input events, 
    // but before `CADisplayLink` callbacks.
    self.view.center.y = sin(info.modelTime) * 100 + self.view.bounds.midY
}

// Add an action to a specific UI update phase that you choose.
updateLink.addAction(to: .afterUpdateScheduled) { link, info in 
    // Code that runs each UI update, after the system schedules the update, 
    // but before processing input events.
    // ...
}
```

> Important:
> Only use ``doc://com.apple.uikit/documentation/UIKit/UIUpdateLink`` from the main thread.

## Topics

### Creating a UI update link

[`init(view:)`](/documentation/UIKit/UIUpdateLink/init(view:))

Creates a UI update link for the specified view.

[`init(view:actionHandler:)`](/documentation/UIKit/UIUpdateLink/init(view:actionHandler:))

Creates a UI update link for the specified view using the specified action handler.

[`init(view:actionTarget:selector:)`](/documentation/UIKit/UIUpdateLink/init(view:actionTarget:selector:))

Creates a UI update link for the specified view using the specified target and action.

[`init(windowScene:)`](/documentation/UIKit/UIUpdateLink/init(windowScene:))

Creates a UI update link for the specified window.

[`init(windowScene:actionHandler:)`](/documentation/UIKit/UIUpdateLink/init(windowScene:actionHandler:))

Creates a UI update link for the specified window using the specified action handler.

[`init(windowScene:actionTarget:selector:)`](/documentation/UIKit/UIUpdateLink/init(windowScene:actionTarget:selector:))

Creates a UI update link for the specified window using the specified target and action.

### Participating in UI updates

[`isEnabled`](/documentation/UIKit/UIUpdateLink/isEnabled)

A Boolean value that determines whether the UI update link is monitoring UI updates.

### Configuring preferences

[`requiresContinuousUpdates`](/documentation/UIKit/UIUpdateLink/requiresContinuousUpdates)

A Boolean value that determines whether the UI update link needs continuous UI updates.

[`wantsLowLatencyEventDispatch`](/documentation/UIKit/UIUpdateLink/wantsLowLatencyEventDispatch)

A Boolean value that determines whether the UI update link requests dispatch of low-latency eligible events.

[`wantsImmediatePresentation`](/documentation/UIKit/UIUpdateLink/wantsImmediatePresentation)

A Boolean value that determines whether the UI update link requests immediate frame presentation.

[`preferredFrameRateRange`](/documentation/UIKit/UIUpdateLink/preferredFrameRateRange)

The range of frame rates the UI update link prefers.

### Getting the current UI update information

[`currentUpdateInfo()`](/documentation/UIKit/UIUpdateLink/currentUpdateInfo())

Returns an object that describes the current UI update state.

[`UIUpdateInfo`](/documentation/UIKit/UIUpdateInfo)

An object that contains detailed information about the current UI update state.

### Adding actions

[`addAction(handler:)`](/documentation/UIKit/UIUpdateLink/addAction(handler:))

Adds an action with the specified handler to the UI update link.

[`addAction(to:handler:)`](/documentation/UIKit/UIUpdateLink/addAction(to:handler:))

Adds an action with the specified handler to the UI update link for a particular UI update phase.

[`addAction(target:selector:)`](/documentation/UIKit/UIUpdateLink/addAction(target:selector:))

Adds an action with the specified target and selector to the UI update link.

[`addAction(to:target:selector:)`](/documentation/UIKit/UIUpdateLink/addAction(to:target:selector:))

Adds an action with the specified target and selector to the UI update link for a particular UI update phase.

[`UIUpdateActionPhase`](/documentation/UIKit/UIUpdateActionPhase)

An object that defines specific phases of the UI update process.



---

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)