[ios] iPhone UITableView 스크롤 성능 향상을위한 트릭?

각 셀에 상당히 큰 이미지를로드하는 uitableview가 있으며 셀 높이는 이미지의 크기에 따라 다릅니다. 스크롤 성능은 괜찮지 만 때때로 불안정 할 수 있습니다.

FieryRobot 블로그에서 찾은 다음 팁을 찾았습니다.

uitableview로 유리 스크롤

uitableview로 더 유리한 스크롤링

누구든지 uitableview 스크롤 성능을 개선하기위한 팁이 있습니까?



답변

  1. 행 높이 캐시 (테이블보기에서 자주 요청할 수 있음)
  2. 테이블에 사용 된 이미지에 대해 가장 최근에 사용되지 않은 캐시를 생성하고 메모리 경고를 받으면 모든 비활성 항목을 무효화합니다.
  3. 모든 것을 그리기 UITableViewCelldrawRect:경우 모든 비용으로 가능한 피하기 파단 (또는 표준 접근성 기능이 필요한 경우, 컨텐츠보기의drawRect: )
  4. UITableViewCell의 레이어를 불투명하게 만듭니다 (컨텐츠 뷰가있는 경우에도 동일 함).
  5. UITableView예제 / 문서에서 권장하는 reusableCellIdentifier 기능을 사용하십시오.
  6. UIImages 로 미리 베이킹되지 않은 그라디언트 / 복잡한 그래픽 효과를 피하십시오.


답변

  1. 하위 클래스
    UITableViewCell를 만드는 경우 Nib을 사용하지 말고 대신 코드로 작성하십시오. Nib 파일을로드하는 것보다 훨씬 빠릅니다.
  2. 이미지를 사용하는 경우 이미지를 캐시하고 있는지 확인하여 각각에 대해 파일에서 한 번 이상로드 할 필요가 없습니다 (메모리가있는 경우 이미지가 차지하는 공간의 양에 놀랄 것입니다).
  3. 가능한 한 많은 요소를 불투명하게 만드십시오. 마찬가지로 투명한 이미지를 사용하지 말고 사용하십시오.


답변

Tweetie의 개발자는 이에 대해 광범위하게 작성했으며 해당 앱에서 어떻게 수행되었는지를 보여주는 코드가 있습니다. 기본적으로 그는 테이블 셀당 하나의 사용자 정의보기를 옹호하고 수동으로 그립니다 (다른 옵션 중에서 Interface Builder를 사용하여 하위보기하는 대신).

uitableview로 트윗에서 빠른 스크롤

또한 Apple은 TableViewSuite 자습서에서 TableView에 대한 자체 샘플 코드를 업데이트했습니다 (아마도 이에 대한 응답일까요?).

TableViewSuite


답변

UITableView 스크롤링의 # 1 성능 킬러는 모든 셀 뷰 레이어에 그림자를 그리는 것이므로 스크롤 성능이 중요하다면 기본적으로 기본 스레드 속도가 느려지지 않는 한 그림자를 사용하지 마십시오.

받아 들여진 답변 중 그림자와 레이어에 대한 언급이 없기 때문에 이것을 말해야한다고 생각했습니다. : +)


답변

UITableView스크롤 성능 문제 는 다른 답변에서 이미 설명한 기술을 사용하여 해결할 수 있습니다. 그러나 여러 번 느린 성능은 본질적으로 오류가 있거나 반복적 인 것으로 인해 발생합니다.

UITableView셀 을 재사용한다는 사실과 각 셀에 자체 이미지가 필요할 수 있다는 사실은 함께 솔루션 비트를 복잡하게 만듭니다. 일반적인 방법으로 해결되는 방법에서 처리해야 할 사항을 요약합니다.

  1. REST / 데이터베이스에서 데이터 소스로 데이터를로드합니다. 이 단계는 백그라운드에서 수행되어야하며 결국 GCD 대기열과 함께 dispatch_async를 사용합니다.
  2. 관련 데이터 모델 객체를 생성 및 초기화하고 배열에 넣습니다.
  3. [tableView reloaddata]
  4. 내부 cellForRowAtIndexPath 에 배열의 올바른 데이터 모델 개체에서 데이터 (텍스트)를 설정하는 코드를 포함합니다.
  5. 이제 이미지도 URL 형식 일 수 있으므로이 단계는 테이블보기에서 수행되는 셀 재사용으로 인해 약간 기발 할 수 있습니다. 사실의 핵심은 비동기 대기열을 사용하여 장치 캐시 / URL에서 이미지를 다시로드 한 다음 올바른 cell.image (셀 이미지 속성이 무엇이든)로 설정하는 것입니다.

문제를 방지하려면 테이블보기 내 에서 이미지의 지연로드에 대한이 자습서를 참조하십시오 .


답변