2012-06-06 5 views
3

상대적으로 '무거운'사용자 정의 테이블 뷰 셀이있는 테이블 뷰를 사용합니다. 단일 셀 (전체 계층 구조)에 약 100 개의 하위 뷰가 있다고합니다. 그럼에도 불구하고 불투명 뷰만 사용하거나 뷰 계층에서 제거하거나 심지어 셀 높이를 사전로드하는 등의 선입관을 사용하여 매우 부드러운 스크롤링을 할 수있었습니다.UITableView에서 재사용 가능한 셀을 캐시하도록하십시오.

문제가 있습니다. 단일 셀 인스턴스를 만드는 것이 여전히 상대적으로 비용이 많이 든다는 것입니다. 표준 UITableView의 셀 재사용 논리가 작동하는 방식 때문에이 문제는 특정 조건에서만 눈에 띄기 쉽습니다.

일반적으로 테이블 뷰가로드 될 때 (그리고 초기 내용이 표시 될 때) 거의 모든 필수 셀 인스턴스가 생성되므로 스크롤을 시작할 때 더 이상 재사용 할 수있는 셀을 만들 필요가 거의 없습니다. 그러나 어떤 이유로 시작 부분에 몇 개의 셀만 표시하면 스크롤이 시작될 때 더 많은 셀을 생성해야합니다. 제 경우에는 넓은 테이블 뷰 헤더가 있거나 첫 번째 셀이 충분히 크면 눈에.니다. 일단 스크롤을 시작하면 새로운 셀 인스턴스가 만들어지면서 잠시 동안 눈에 띄는 지체가 발생합니다. 정말 추악한 것은 아니지만 특히 눈에 띄는 것은 그 이후의 스크롤링과는 완전히 다른 것입니다.

이제는 '가벼운'셀을 만드는 것이 확실합니다. 각 셀을보다 세부적인 유형으로 나누어 각 셀에 하위 뷰를 적게 넣을 수 있습니다. 하지만 내 콘텐츠가 체계화되어 있기 때문에 매우 복잡한 솔루션이 될 것입니다.

내 질문에 - 거기에 적절한 방법을 '속임수'테이블보기 논리를로드하고 강제로 재사용 가능한 셀 인스턴스의 특정 번호의 캐싱을 강제로 - 실제로 셀 수의 불구하고?

제가 생각해 보았던 옵션 중 하나는 셀을 명시 적으로 캐시하고 필요할 때 셀을 미리 채우는 것입니다 (예 : in -viewDidLoad). 이 접근법에서 내가 가진 문제는 미리 필요한 세포의 정확한 유형을 알아야한다는 것입니다. 개선 사항은 초기 데이터가로드 될 때 캐시를 작성하는 것이므로 최소한 정확한 유형의 컨텐츠가 알려져 있지만 간단한 옵션이 있는지 궁금해하고 있습니다.

답변

3

데이터 소스에 자체 "보조 캐시"레이어를 추가하여이를 수행 할 수 있습니다.

데이터 소스를 초기화 할 때 필요한만큼 셀을 미리 만들고 배열에 넣으십시오. dequeueReusableCellWithIdentifier이 실패하면 먼저 해당 배열로 이동하여 거기에서 셀을 가져옵니다. 일단 배열이 고갈되면 새로운 셀을 생성하기 시작합니다. 충분한 셀을 미리 작성하면 즉석에서 새 셀을 작성할 필요가 없습니다. 충분한 대기열이 보이지 않거나 밖에 순환하는 경우 dequeuing은 결국 실패합니다.

관련 문제