2016-11-11 89 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。在主線程

相關問題