2016-11-11 1 views
0

나는 UITableView 셀을 사용자 지정하고 셀에 차트가있는보기 (Charts 라이브러리)가 있습니다. 차트 데이터가 꽤 큽니다 (컨트롤러의 속성으로 저장 됨). 몇 초 동안 나타납니다. 거기에 약간의 시차가 나타 테이블보기를 스크롤 할 때 맞춤형 셀을 사용하여 UITableView를 스크롤 할 때 성능 향상

또한 나는 정의 TableViewCell 클래스

setSelected 방법의 일부 차트의보기 설정 (단지 약간의 UI 변경) 할. 나는 그것이 표시하고자하는 무거운 내용 때문에 일어난다 고 생각합니다. 이 배열에서 CellForRowAt 방법 쇼 세포에서, 배열에 저장, ViewDidAppear

  1. 로드 모든 셀 : 나는 약 4 해결책을 생각했습니다이 문제를 해결하는 동안

    .

  2. 테이블보기를 스크롤보기에 놓으면 테이블보기의 모든 셀에 맞도록 내용의 높이를 크게 만듭니다.

  3. 차트로드는 셀로드 및 내용보기가 나타난 후에 만 ​​수행하십시오. 차트로드가 켜져있는 동안 활동 표시기를 표시합니다.

  4. 차트를 백그라운드 스레드에로드합니다.

처음 두 가지 접근 방식은 나에게 메모리 관리 측면에서 좋지 않은 것처럼 보입니다. 그러나 나는 확실하지 않습니다. 아마도 내가 알지 못했던 일반적인 해결책이있을 것입니다.

프로젝트의 일부 코드 예제 :

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let graphCell = tableView.dequeueReusableCell(withIdentifier: Cells.graphViewCell) as! GraphViewCell 

    graphCell.lineChartView.data = track.chartDataForHeight() 
    return graphCell 
} 

여기 track이야 내가 차트 데이터를 저장하는 변수입니다.

+0

주 스레드에서 UI를 많이 업데이트하면 tableviewscroll에 영향을줍니다. 그래서 당신의 3 가지 접근 방식은 좋을 것이고 모든 접근 방식 업데이트가 메인 스레드에서 이루어져야하기 때문에 4 번째 접근 방식에 문제가있을 것입니다 – Vinodh

답변

0

셀이 너무 많지 않고 그다지 많지 않으므로 매번 생성하기를 원하지 않는다면 dequeResuableCell을 사용하지 말고 셀을 게으르게 생성하여 캐시하십시오. didReceiveMemoryWarning에 응답하고 화면 셀을 덤프 한 다음 게으르게 다시 작성하여 메모리 문제를 완화 할 수 있습니다. UICollectionView의 ios 10에 prefetching이 추가되었습니다. UITableView 대신이 도구를 사용해 볼 수도 있습니다.

관련 문제