2016-11-11 91 views
0

我有一个UITableView哪些单元格是自定义的,并且单元格具有图表(Charts库)的视图。图表的数据非常大(它作为Controller的属性存储),它在几秒钟内出现。使用自定义单元格滚动UITableView时提高性能

我也做了一些图表的视图设置(只有很少的UI变化)在setSelected方法定制TableViewCell

滚动时有一定的滞后出现表视图。我想这是因为我想展示的内容太多而发生的。

在解决这个问题我想过四种解决方案:从这个数组中ViewDidAppear

  1. 加载所有的细胞,将它们保存到数组中,CellForRowAt方法表演细胞。

  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方法会很好。第四种方法会有问题,因为所有UI更新都应该在主线程中完成 – Vinodh

回答

0

如果你有一个非常复杂的单元格,而且它们不是太多,并且你不想每次都花钱创建它,那么它的正确就是不使用dequeResuableCell,只是懒洋洋地创建单元格并缓存它们。您可以通过响应didReceiveMemoryWarning减少内存问题,然后倾泻屏幕外单元,然后懒洋洋地重新创建它们。 UICollectionView现在在ios 10中有prefetching。你也可以尝试使用它来代替UITableView。在主线程

相关问题