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

# UICollectionViewDataSourcePrefetching

A protocol that provides advance warning of the data requirements for a collection view, allowing the triggering of asynchronous data load operations.

```
@MainActor protocol UICollectionViewDataSourcePrefetching : NSObjectProtocol
```

## Overview

You use a prefetch data source object in conjunction with your collection view’s data source to begin loading data for cells before the [`collectionView(_:cellForItemAt:)`](/documentation/UIKit/UICollectionViewDataSource/collectionView(_:cellForItemAt:)) data source method is called.

Follow these steps to add a prefetch data source to your collection view:

1. Create the collection view and its data source.
2. Create an object that adopts the [`UICollectionViewDataSourcePrefetching`](/documentation/UIKit/UICollectionViewDataSourcePrefetching) protocol, and assign it to the [`prefetchDataSource`](/documentation/UIKit/UICollectionView/prefetchDataSource) property on the collection view.
3. Initiate asynchronous loading of the data required for the cells at the specified index paths in your implementation of [`collectionView(_:prefetchItemsAt:)`](/documentation/UIKit/UICollectionViewDataSourcePrefetching/collectionView(_:prefetchItemsAt:)).
4. Prepare the cell for display using the prefetched data in your implementation of the [`collectionView(_:cellForItemAt:)`](/documentation/UIKit/UICollectionViewDataSource/collectionView(_:cellForItemAt:)) data source method.
5. Cancel pending data load operations when the collection view informs you that the data is no longer required in the [`collectionView(_:cancelPrefetchingForItemsAt:)`](/documentation/UIKit/UICollectionViewDataSourcePrefetching/collectionView(_:cancelPrefetchingForItemsAt:)) method.

> Note:
> The prefetch method isn’t necessarily called for every cell in the collection view. See <doc://com.apple.uikit/documentation/UIKit/UICollectionViewDataSourcePrefetching#Load-data-asynchronously> for details on a suggested approach to loading data.

For more information, see [`UICollectionView`](/documentation/UIKit/UICollectionView).

### Load data asynchronously

The [`collectionView(_:prefetchItemsAt:)`](/documentation/UIKit/UICollectionViewDataSourcePrefetching/collectionView(_:prefetchItemsAt:)) method isn’t necessarily called for every cell in the collection view. Your implementation of [`collectionView(_:cellForItemAt:)`](/documentation/UIKit/UICollectionViewDataSource/collectionView(_:cellForItemAt:)) must therefore be able to cope with the following potential situations:

- Data has been loaded via the prefetch request, and is ready to be displayed.
- Data is currently being prefetched, but isn’t yet available.
- Data hasn’t yet been requested.

One approach that handles all of these situations is to use <doc://com.apple.documentation/documentation/Foundation/Operation> to load the data for each row. You create the <doc://com.apple.documentation/documentation/Foundation/Operation> object and store it in the prefetch method. The data source method can then either retrieve the operation and the result, or create it if it doesn’t exist. For further information about how you can use asynchronous programming models to achieve this desired behavior, see [Concurrency Programming Guide](https://developer.apple.com/library/archive/documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008091).

## Topics

### Managing data prefetching

[Prefetching collection view data](/documentation/UIKit/prefetching-collection-view-data)

Load data for collection view cells before they display.

[`-  collectionView:prefetchItemsAtIndexPaths:`](/documentation/UIKit/UICollectionViewDataSourcePrefetching/collectionView(_:prefetchItemsAt:))

Tells your prefetch data source object to begin preparing data for the cells at the supplied index paths.

[`-  collectionView:cancelPrefetchingForItemsAtIndexPaths:`](/documentation/UIKit/UICollectionViewDataSourcePrefetching/collectionView(_:cancelPrefetchingForItemsAt:))

Cancels a previously triggered data prefetch request.

## Relationships

### Inherits From

[`NSObjectProtocol`](/documentation/ObjectiveC/NSObjectProtocol)

---

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)