我有UITableView
个单元格是自定义的,单元格有一个带图表的视图(Charts
库)。图表的数据非常大(它存储为Controller的属性),它会在几秒钟内出现。
另外,我在自定义setSelected
类
TableViewCell
方法中执行了一些图表的视图设置(只有很少的UI更改)
滚动表格视图时会出现一些滞后现象。我想这是因为我想要显示的内容很多。
在解决这个问题时,我考虑过四个解决方案:
在ViewDidAppear
中加载所有单元格,将它们保存到数组中,在CellForRowAt
方法中显示此数组中的单元格。
将表格视图放入滚动视图,使内容的高度非常大,以适合表格视图中的所有单元格。
仅在单元格加载及其内容视图出现后才加载图表。在图表加载开启时显示活动指示。
将图表加载到后台主题中。
在我看来,前两种方法在内存管理方面不太好。但我不确定,也许有一些我不知道的常见解决方案。
项目中的一些代码示例:
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 :(得分:0)
如果你有一个非常复杂的单元而且没有太多的单元而且你不想每次都要付钱,那么它是正确的不使用dequeResuableCell而只是懒惰地创建单元并缓存它们。您可以通过响应didReceiveMemoryWarning并转储屏幕外单元格然后懒洋洋地重新创建它们来缓解内存问题。 UICollectionView现在在ios 10中有prefetching。您也可以尝试使用它而不是UITableView。