-
[UIKit] UITableViewCell 재사용에 대한 실험iOS/UIKit 2022. 8. 23. 23:15
tableview cell의 lifetime
생성 -> 큐에 들어감 -> readyforreuse -> 보임
모든 index에 대해서 셀을 생성하지 않고, 만들어진 셀을 공유함으로써 메모리를 절약할 수 있습니다.
이때 아무리 디버거로 메모리를 들여다봐도 reuseQueue에 어떤 인스턴스가 들어가 있는지 확인할 수 없어서
직접 실험을 통해서 알아봤습니다.
즉 tableviewcell이 어떤 방식으로 재활용되는지 알아보는 간접적인 실험입니다.
제일 처음에는 위와 같이 화면에 보이는 셀들만 생성이 됩니다.
0번째 셀이 완벽하게 들어가지 않은 상황입니다.
reuseQueue에 아무것도 없기 때문에, 새로운 cell이 생성됩니다.
이제 0번째 셀이 완벽하게 가려졌습니다.
그렇다면 0번째 셀은 reuseQueue에 들어가서, 다음 번호인 13번을 달고 나올 것으로 예상이 됩니다.
안타깝게도 13번째에도 새로운 셀이 생성되었습니다.
14번째부터 기존의 셀이 재사용되어서 나온 것을 볼 수 있습니다.
여기에서 14번째 셀의 주소 값을 보면 0x00007fc3ed0058b0인데,
0번째로 나왔던 셀의 주소 값을 확인해보면 일치하는 것을 볼 수 있습니다.
다시 위로 스크롤해보면
가장 최근에 사라진 16번이 2번을 달고 나타나고, 15번이 1번을,... 이러한 방식으로 동작하게 됩니다.
현재 보이고 있는(실제로 눈에 보이지는 않지만) 셀은 이렇게 되는 겁니다.
위/아래로 스크롤되었을 때 바로 보일 수 있도록 실제로 보이는 것보다 더 큰 범위가 존재하는 거죠
추가적으로 스크롤을 빠르게 하면, 기존의 셀이 reuseQueue에 들어가기도 전에 dequeue를 요청합니다.
이럴 때에는 reuseQueue에서 꺼내 줄 셀이 없기 때문에, 새로운 셀이 생성돼서 나타나게 됩니다.
'iOS > UIKit' 카테고리의 다른 글
[UITextField] 일정 포멧에 맞춰서 / 마스크 입혀주기 (0) 2022.01.22 [미세먼지 TIL] 퍼센트값으로 된 line height의 적용 (0) 2022.01.18 UIButton.Configuration으로 리펙토링 아이디어 (0) 2022.01.14 [UIKit] TableViewCell 내부의 button이 작동하지 않을 때 (0) 2022.01.13 [UIKit] ScrollView 안에 TableView 넣기 (1) 2022.01.05