Reuse Cell

Judy·2022년 6월 16일
0

iOS

목록 보기
14/28

Configure Cell's Content

스토리보드에서 Cell의 콘텐츠 구성하기

테이블은 디폴트로 하나의 Cell을 가지고 있는데 프로토타입 Cell의 attribute에서 값을 변경해서 추가할 수 있다.

Cell의 내용과 함께 다음의 속성들도 구성해줘야 한다.

  • Identifier: Cell을 만들 때 사용할 식별자(=재사용 식별자)
  • Style: Cell의 형태로 기본 스타일 중에서 선택하거나 Custom해서 사용
  • Class: Cell의 UITableViewCell 서브클래스 지정

Reusing Cell

  • var reuseIdentifier: String?
    A string used to identify a cell that is reusable.
  • func prepareForReuse()
    Prepares a reusable cell for reuse by the table view's delegate.

reuseIdentifier

var reuseIdentifier: String? { get }

reuseIdentifier을 통해 Table View Delegate가 테이블뷰의 row로 재사용하기 위한 UITableViewCell 개체와 연결한다.

init(frame:reuseIdentifier:) 메서드에서 cell 개체에 할당된 후 변경할 수 없다.

UITableView 개체는 현재 재사용 가능한 cell의 큐를 유지하고 관리한다. 고유한 reuseIdentifier를 가지며 dequeueReusableCell(withIdentifier:) 메서드에서 사용된다.

dequeueReusableCell

identifier로 구분한 후 재사용 가능한 Cell을 반환

func dequeueReusableCell(withIdentifier identifier: String) -> UITableViewCell?

TableView Data Source에서 테이블뷰에 대한 새로운 셀을 요청할 때 이 메서드를 호출한다. 이 메서드는 기존 셀에서 재사용 가능한 경우 큐에서 빼거나, nib 파일을 이용해 새로운 셀을 생성한다. 만약 재사용할 셀이 없고, nib 파일을 등록하지 않은 경우 nil을 반환한다.

새로운 셀을 생성할 때는 init(style:reuseIdentifier:) 메서드를 호출해 셀을 초기화한다. 셀을 재사용하는 경우에는 해당 셀의 prepareForReuse() 메서드를 호출한다.

func dequeueReusableCell(
    withIdentifier identifier: String,
    for indexPath: IndexPath
) -> UITableViewCell

식별자와 함께 셀의 위치를 나타내는 IndexPath를 함께 받아 셀을 가져오는 메서드이다. 식별자에 맞는 기존 셀을 반환하거나 클래스나 스토리보드를 이용해 새로운 셀을 만들어서 반환한다. TableView Data Source의 tableView(_:cellForRowAt:)에서만 사용가능하다. 다른 곳에서 셀을 생성하고 싶다면 dequeueReusableCell(withIdentifier:) 메서드를 사용해야 한다.

스토리보드에서 설정한 identifier와 일치해야 한다!

prepareForReuse

TableView Delegate가 셀을 재사용할 수 있도록 준비

func prepareForReuse()

dequeueReusableCell 메서드를 통해 셀이 재사용되기 전에 호출된다. 혹시 모를 성능 문제를 방지하기 위해 셀 내용과 관련 없는 셀의 속성(ex alpha, editing, and selection state)만 재설정 해야한다. TableVeiw Delegate는 tableView(_:cellForRowAt:) 메서드에서 셀을 재사용할 때 모든 내용을 재설정해야 한다.

셀을 재사용하는 이유

성능상의 이유 -> 메모리 절약
모든 셀을 1:1로 메모리에 가지고 있는 것은 비효율적! 그래서 화면에 나타나는 셀만 메모리에 두고 셀의 틀을 재사용해서 내용만 바꾼다. 내용만 바꾸기 때문에 다른 속성 또한 재사용되어 예상치 못한 셀로 표현될 수 있으니 prepareForReuse 메서드에서 관련 속성을 재설정하거나 초기화하면 된다.




UITableViewCell
reuseIdentifier
prepareForReuse
dequeueReusableCell

profile
iOS Developer

0개의 댓글