rudin_.log
로그인
rudin_.log
로그인
[iOS] Table View 구현 분석
RudinP
·
2024년 2월 20일
팔로우
0
iOS
tableview
스터디
0
Study
목록 보기
170/227
메소드 호출 분석
델리게이트 패턴에서는
언제
, 어느
순서
로,
몇 번
호출되는지 파악하는 것이 중요하다.
#1 메소드가 두 번 호출된 이유는 레퍼런스에 나와있지 않지만, 내부적으로 두 번 필요한가보다.. 어쨌든 표시할 셀의 개수를 파악한다.
#2 메소드가 100번 호출되지 않고 18번 호출되는 이유는
화면에 한 번에 18개의 셀이 표시되었기 때문이다.
만약 콘솔과 화면의 셀 개수에 차이가 있는 경우, 이유는 다음과 같다.
테이블뷰는 항상 화면에 표시되는 셀 개수보다 미리 더 만들어두는 경우가 존재하기 때문이다.
#2 메소드는 테이블뷰가 화면에 표시할 데이터가 필요할 때마다 호출한다.
흐름
1. #1 메소드를 통해 표시할 셀의 개수 확인
2. #2 메소드로 0 섹션의 0번째 셀의 내용을 표시하기 위해 재사용 큐를 확인하는데, 큐에 셀이 아직 없으므로 새로 만들고, 이 셀의 내용을 채워 리턴
화면에서 안 보이게 된 셀은 재사용 큐로 들어간다.(삭제되는 것이 아님)
이후 재사용 큐에 셀이 있다면 새로 만들지 않고 이 셀을 재사용한다.
100개를 표시하건 1000개를 표시하건 하나의 화면에 표시할 수 있는 셀 개수에 한, 두개 정도면 버퍼로 추가로 만들고 재사용.
적은 메모리로 많은 데이터를 표시할 수 있다.
실행 시간이 적어진다.
스크롤 성능이 높아짐.
셀이 표시되기 전에 반복적으로 호출된다.
재사용 메커니즘
사용
부드럽게 스크롤 되게 하려면, 해당
메소드의 처리가 16ms 안에 완료
되어야 한다.(속도가 빨라야 함)
3. 전달받은 셀을 테이블뷰가 표시.
재사용 큐 구조 확인
19번째 셀까지만 내용을 채워주도록 변경
화면을 내릴 시 Title표시 이후 이전과 동일한 내용의 셀이 출력
Title로 표시된 셀은 새로 생성되어 반환된 셀이고, 동일한 내용의 셀은 재사용 된 셀이다.
이후 화면을 내렸을 때 또 표시된 Title은 이 새로 만들어졌던 셀이 재사용 된 것이다.
참고로 재사용 큐에는 항상 인덱스 순서대로 셀이 들어가는 것이 아니다. 마음대로 스크롤 할 수 있기 때문에, 큐에 들어가는 것과 인덱스는 무관하다.
Title이라는 내용의 셀이 재사용 되었을 때, 18번까지의 인덱스를 가졌던 셀이 표시 요청을 받게 되면 이 Title이라는 내용이 덮어씌어지기 때문에 Title의 개수가 줄어든다.
따라서 어떤 인덱스가 재사용되는지는 알 수 없다.
RudinP
곰을 좋아합니다. <a href = "https://github.com/RudinP">github</a>
팔로우
이전 포스트
[iOS] TableView Delegate Pattern
다음 포스트
[iOS] Table View 선택 이벤트, 멀티 섹션
0개의 댓글
댓글 작성