UITableViewDataSourcePrefetching

Panther·2021년 8월 27일
0

https://developer.apple.com/documentation/uikit/uitableviewdatasourceprefetching

"A protocol that provides advance warning of the data requirements for a table view, allowing you to start potentially long-running data operations early."

잠재적으로 긴 시간이 필요한 데이터 작업을 미리 시작할 수 있도록 해주면서, 테이블 뷰에 대한 데이터 요구사항의 사전 경고를 제공하는 프로토콜입니다.

Declaration

@MainActor protocol UITableViewDataSourcePrefetching

Overview

tableView(_:cellForRowAt:) 데이터 소스 메소드가 호출되기 전에 데이터 로딩을 시작하기 위해 테이블 뷰의 데이터 소스와 함께 프리패치 데이터 소스 객체를 사용할 수 있습니다. 테이블 뷰에 프리패치 데이터 소스를 지원하려면 아래 단계들이 요구됩니다.

  • 테이블 뷰를 생성하고 일반적인 데이터 소스를 생성합니다.
  • UITableViewDataSourcePrefetching 프로토콜을 채택하는 객체를 생성하고, 이 객체를 테이블 뷰에서 prefetchDataSource 속성에 할당합니다.
  • tableView(_:prefetchRowsAt:)의 구현 내부 안에서 구체화된 인덱스 경로로 셀을 위해 요구되는 데이터의 비동기 로딩을 시작합니다.
  • tableView(_:cellForRowAt:) 데이터 소스 메소드에서 프리패치된 데이터를 사용해 표시를 위한 셀을 준비합니다.
  • 테이블 뷰가 tableView(_:cancelPrefetchingForRowsAt:) 메소드에서 더 이상 데이터가 요구되지 않는다고 알리는 경우 보류중인 데이터 로드 작업을 취소합니다.

Note
프리패치 메소드는 테이블 뷰에서 모든 셀에 대해 반드시 호출되는 것은 아닙니다. 데이터 로딩에 대한 접근방식은 Loading Data Asynchronously를 참고하시기 바랍니다.

Loading Data Asynchronously는 이 글의 아래 부분에 나옵니다.

테이블 뷰 객체를 설정할 때 프리패치 데이터 소스를 테이블 뷰 객체의 prefetchDataSource 속성에 할당해야 합니다. 더 많은 정보는 UITableView를 보시기 바랍니다.

UITableView
<>
<>

Loading Data Asynchronously

tableView(_:prefetchRowsAt:) 메소드가 테이블 뷰에 있는 모든 셀에 대해 반드시 호출되는 것은 아닙니다. 그러므로 tableView(_:cellForRowAt:)의 구현은 아래 내용과 같은 잠재적 상황에 대처할 수 있어야 합니다.

  • 데이터는 프리패치 요청을 거쳐서 로드되어야 하며, 표시될 준비가 되어야 합니다.
  • 데이터는 프리패치되는 중에 아직 사용할 수는 없습니다.
  • 데이터가 아직 요청되지 않았습니다.

이와 같은 모든 상황을 처리하는 한 가지 접근방식은 각 행에 대한 데이터를 로드하기 위해 Operation을 사용하는 것입니다. 그러면 데이터 소스 메소드는 작업 및 결과를 가져올 수 있거나 존재하지 않는 경우 생성할 수 있습니다. 이와 같은 동작을 달성하기 위한 비동기 프로그래밍 모델을 사용할 수 있는 방법은 Concurrency Programming Guide를 보시기 바랍니다.

Concurrency Programming Guide
https://developer.apple.com/library/archive/documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008091

See Also


Data

Filling a Table with Data

데이터 소스 객체를 사용해서 동적으로 테이블을 위한 셀을 생성 및 설정합니다. 혹은 스토리보드로부터 정적으로 셀을 제공합니다.

https://developer.apple.com/documentation/uikit/views_and_controls/table_views/filling_a_table_with_data
https://velog.io/@panther222128/Filling-a-Table-with-Data

UITableViewDiffableDataSource

테이블 뷰에서 데이터를 관리하고 셀을 제공하기 위해 사용하는 객체입니다.

https://developer.apple.com/documentation/uikit/uitableviewdiffabledatasource
https://velog.io/@panther222128/UITableViewDiffableDataSource

UILocalizedIndexedCollation

섹션 인덱스를 갖는 테이블 뷰에서 데이터를 조직화, 정렬, 로컬화하는 객체입니다.

https://developer.apple.com/documentation/uikit/uilocalizedindexedcollation
https://velog.io/@panther222128/UILocalizedIndexedCollation

UIRefreshControl

스크롤 뷰 컨텐츠의 리프레시를 시작할 수 있는 표준 컨트롤입니다.

https://developer.apple.com/documentation/uikit/uirefreshcontrol
https://velog.io/@panther222128/UIRefreshControl


0개의 댓글