2016-11-11 5 views
0

私はUITableViewセルがカスタムであり、セルにはチャート(Chartsライブラリ)のビューがあります。グラフのデータはかなり大きく(コントローラのプロパティとして保存されています)、数秒間表示されます。そこにいくつかのラグが表示されるテーブルビューをスクロールするとき カスタムセルでUITableViewをスクロールするときのパフォーマンスを向上させよう

はまた、私は、カスタム TableViewCellクラス

setSelected方法でいくつかのグラフの表示設定(少しだけUIの変更)を行います。私は表示したいと思う重い内容のためにそれが起こると思う。

  1. ロードViewDidAppearのすべてのセル、この配列からCellForRowAt方法ショーの細胞では、配列に保存する:私は約4解決策を考えてきました。この問題を解決する中、

  2. スクロールビューにテーブルビューを置くと、テーブルビューのすべてのセルに収まるようにコンテンツの高さをかなり大きくします。

  3. グラフの読み込みは、セルの読み込みとコンテンツビューの表示後に行うようにしてください。チャートの読み込み中にアクティビティインジケータを表示します。

  4. バックグラウンドスレッドでグラフをロードします。

最初の2つのアプローチはメモリ管理の面ではあまり良くありません。しかし、私はよくわからない、私は知らなかった共通の解決策があるかもしれない。

プロジェクトからいくつかのコード例:

 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のアプローチは、すべてのUIアップデートがメインスレッドで行われる必要があるため、問題があります – Vinodh

答えて

0

非常に複雑なセルがあり、あまりにも多くなくても毎回それを作成したくない場合は、dequeResuableCellを使用しないでセルを作成してキャッシュするだけです。 didReceiveMemoryWarningに応答し、オフスクリーンセルをダンプして遅延レイクを再作成することで、メモリの問題を緩和することができます。 UICollectionViewのios 10にはprefetchingが追加されました。また、これをUITableViewの代わりに使用することもできます。

関連する問題