본문 바로가기

UIKit

[UIKit] CollectionView - cell reuse시 주의해야 할 점

반응형

collectionView 사용 시, cell을 구성하기 위해 dataSource function 중 하나인 cellForItemAt을 사용합니다.

 

그리고 일반적으로 이 function 안에서, 많은 양의 셀의 생성/소멸을 막아 메모리의 부담을 줄이기 위해 셀을 재사용하는 과정을 거칩니다.

 

이는 구성한 각 셀들이 CollectionView를 reload 할 경우, 실질적으로 다른 셀들이 될 수 있음을 의미합니다.

 

cellForItemAt을 통해 Cell을 구성한다면 보기에는 reload 이전과 같은 Cell로 보이지만, reload 과정에서 이전과 같은 셀을 재사용한다는 보장이 되어 있지 않기 때문입니다.

 

주기적으로 hashValue 출력

위 영상은 Timer를 통해 일정 주기로 CollectionView를 reload하며, 각 셀들의 hashValue를 출력한 결과입니다.

 

위 상황을 인지하지 못할 경우, 예상치 못한 결과를 초래할 수 있습니다.

 

예를 들어, Cell 내의 버튼 선택 시, isSelected 여부를 Cell 내에서만 처리한다면 추후 collectionView reload시 원치 않은 Cell의 버튼의 isSelected 값이 변경되어 있는 것을 볼 수 있습니다.

 

정리

  1. collectionView/tableView를 사용할 때, 현재 Cell이 reload시 같은 Cell이라는 보장을 할 수 없다.
  2. 따라서 가급적이면 cell 구성에 필요한 것들은 cellForItemAt/cellForRowAt 에서 하는 것이 정신 건강에 좋다.

 

감사합니다.

 

반응형