overview
Pre-Fetching API とは
- iOS10で用意された
- セルの事前読込
- prefetch時に、画像キャッシュや通信など、処理のやや重いものを扱うことで、スクロールの安定化などが期待できる
- https://speakerdeck.com/toyship/ios10shi-dai-falsecollectionviewzui-xin-tukaikonasi
- セルの事前読込
usage
- prefetchのタイミング( = prefetchItemsAt)で、画像キャッシュのみ行う
- 今回はNukeを利用していたため、NukeのPreheaterを使う
- https://github.com/kean/Nuke#preheating-images
- UICollectionViewDataSourcePrefetching protocolに準拠
collectionView.prefetchDataSource = self
prefetchItemsAt
FooViewController.swift
func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath]) {
preheater.startPreheating(
with: makeCacheRequests(indexPaths: indexPaths)
)
}
private func makeCacheRequests(indexPaths: [IndexPath]) -> [Request] {
return indexPaths.map {
Request(url: viewModel.cellModels[$0.row].url)
}
}
cancelPrefetchingForItemsAt
FooViewController.swift
func collectionView(_ collectionView: UICollectionView, cancelPrefetchingForItemsAt indexPaths: [IndexPath]) {
preheater.stopPreheating(
with: makeCacheRequests(indexPaths: indexPaths)
)
}
etc
- 上記はUICollectionViewの例となるが、UITableViewにも同様の機能がある
- UITableViewDataSourcePrefetching
- https://developer.apple.com/documentation/uikit/uitableviewdatasourceprefetching