메소드 호출 분석
- 델리게이트 패턴에서는 언제, 어느 순서로, 몇 번 호출되는지 파악하는 것이 중요하다.
- #1 메소드가 두 번 호출된 이유는 레퍼런스에 나와있지 않지만, 내부적으로 두 번 필요한가보다.. 어쨌든 표시할 셀의 개수를 파악한다.
- #2 메소드가 100번 호출되지 않고 18번 호출되는 이유는 화면에 한 번에 18개의 셀이 표시되었기 때문이다.
- 만약 콘솔과 화면의 셀 개수에 차이가 있는 경우, 이유는 다음과 같다.
- 테이블뷰는 항상 화면에 표시되는 셀 개수보다 미리 더 만들어두는 경우가 존재하기 때문이다.
- #2 메소드는 테이블뷰가 화면에 표시할 데이터가 필요할 때마다 호출한다.
흐름
1. #1 메소드를 통해 표시할 셀의 개수 확인
2. #2 메소드로 0 섹션의 0번째 셀의 내용을 표시하기 위해 재사용 큐를 확인하는데, 큐에 셀이 아직 없으므로 새로 만들고, 이 셀의 내용을 채워 리턴
- 화면에서 안 보이게 된 셀은 재사용 큐로 들어간다.(삭제되는 것이 아님)
- 이후 재사용 큐에 셀이 있다면 새로 만들지 않고 이 셀을 재사용한다.
- 100개를 표시하건 1000개를 표시하건 하나의 화면에 표시할 수 있는 셀 개수에 한, 두개 정도면 버퍼로 추가로 만들고 재사용.
- 적은 메모리로 많은 데이터를 표시할 수 있다.
- 실행 시간이 적어진다.
- 셀이 표시되기 전에 반복적으로 호출된다.
- 재사용 메커니즘 사용
- 부드럽게 스크롤 되게 하려면, 해당 메소드의 처리가 16ms 안에 완료되어야 한다.(속도가 빨라야 함)
3. 전달받은 셀을 테이블뷰가 표시.
재사용 큐 구조 확인
- 19번째 셀까지만 내용을 채워주도록 변경
- 화면을 내릴 시 Title표시 이후 이전과 동일한 내용의 셀이 출력
- Title로 표시된 셀은 새로 생성되어 반환된 셀이고, 동일한 내용의 셀은 재사용 된 셀이다.
- 이후 화면을 내렸을 때 또 표시된 Title은 이 새로 만들어졌던 셀이 재사용 된 것이다.
- 참고로 재사용 큐에는 항상 인덱스 순서대로 셀이 들어가는 것이 아니다. 마음대로 스크롤 할 수 있기 때문에, 큐에 들어가는 것과 인덱스는 무관하다.
- Title이라는 내용의 셀이 재사용 되었을 때, 18번까지의 인덱스를 가졌던 셀이 표시 요청을 받게 되면 이 Title이라는 내용이 덮어씌어지기 때문에 Title의 개수가 줄어든다.
- 따라서 어떤 인덱스가 재사용되는지는 알 수 없다.