먼저, 1~100까지의 숫자를 갖는 배열을 생성해 준다.
이 배열은 셀의 label에 넣어주어서 표현하면 된다.
let arr = Array(1...100).map { "\($0)" }
처음 실행하면 다음 이미지와 같이 indexPath.row + 1 한 값들이 콘솔에 출력되고 해당 값들은 디바이스 화면에 보이는 값들이랑 동일하다.
그리고 스크롤을 해보면....한 +2개 정도는 미리 가져와 있는 것 같다.. 근데 지금은 라벨이고 속도에 지장줄만한 것들이 없어서 문제가 없어보일지도 모르지만.. 빠르게 스크롤하다보면 문제가 발생할 수도 있다..?
그럼 UITableViewDataSourcePrefetching를 사용하면 어떻게 될까?
tableView.prefetchDataSource = self // 이거 해주고
extension PrefetchViewController: UITableViewDataSourcePrefetching {
// 이거 사용해준다
func tableView(_ tableView: UITableView, prefetchRowsAt indexPaths: [IndexPath]) {
for indexPath in indexPaths {
print("prefectRowAt : \(indexPath.row)")
}
}
}
처음 12까지 보인 상태에서 스크롤하게되면 prefetchRowsAt 호출되면서 12~21까지 셀이 미리 로드되는 것을 볼 수 있다. 그 뒤로 다음 순서들의 인덱스 값을 갖고있는 셀들이 cellForRowAt, PrefetchForRowsAt 호출되는 것을 볼 수 있다.
tableView(_:cancelPrefetchingForRowsAt:)
< 이런 메서드도 있는데 해당 메서드는 이전에 prefetch된 값들을 해제해주는 역할을 하는 메서드다. 위의 gif를 참고해서 보자면 스크롤 하면고 다음 prefetch가 나타나면 해당 메서드가 호출되면서 처음에 prefetch된 12나 13은 cancel 될 것 이다.
ps. 이미지를 다운받으면서 하는 예제도 해보고싶어서 유튜브 참고해서 unsplash에서 url로 다운받는 것도 해봤는데 해당 부분도 이어서 다음에 정리하도록 하려고 합니다....🫠
(혹시 미리 해보고싶으시면 아래 참고에 예제 링크 확인해주시면 됩니다!!)
참고
애플 개발자 문서
성능실험 이미지 출처 블로그
unsplash 예제 링크 - iOS Academy 유튜브