2011-07-29 3 views
0

テーブルビューを持つマルチスレッドアプリケーションがあります。これは、別のスレッドでバックグラウンドでデータを収集します。問題は、ユーザーがテーブルをスクロールすると、データ収集が75%ほど遅くなることです。収集するデータがたくさんあるので、テーブルスクロールでデータ収集のスピードを15%以下にすることができればそれが可能です。UITableVIewのパフォーマンスを向上させるにはどうすればよいですか?

ユーザーが画面から指を離したときに、TableViewを再描画する方法はありますか?ユーザーエクスペリエンスについて心配する必要はありません。心配してください。それをスピードアップできるアイデアがあれば、私はそれらを聞いてみたいと思います。

+1

テーブルをスクロールすると接続が遅くなることを意味していますか? InstrumentsでTime Profilerツールを使用しましたか?テーブルの再描画は、減速の本当の原因ですか? – sergio

+0

しかし、スレッドが完了し、データがテーブルビューで読み込まれる準備ができたら、なぜリロードセルデータにNSNotificationを使用しないのですか?このリンクを参照してください。http://www.raywenderlich.com/4295/multithreading-and-私はあなたがスクロールの再使用のスピードを必要としないと思う... – DShah

答えて

0

ボトルネックのようなサウンドは、バックグラウンドでの「データ収集」なので、それを攻撃することを検討することもできます。テーブルビューコントローラを表示する前に、多くのデータをプリフェッチしてメモリにキャッシュすることができます。

特に複雑な場合は、セルの一部だけを再描画することもできます(たとえば、テキストだけで画像は表示されません)。高価な操作では、0の遅延でセレクタを実行することができ、それは実行ループの次の反復にスローされます(良い戦略です)。

あなたが考えることができる最も良いことは、時間プロファイラを使用して計測器を実行し、ほとんどのCPUを吸い上げるものを攻撃することです。

0

ユーザーがドラッグしているときに、dequeueReusableCellWithIdentifierからnilを返すことができます。 self.tableView.draggingまたはself.tableView.trackingself.viewTable.decelerating(ドラッグまたはトラックがいつ終了するかを特定するため)を呼び出すことで、ユーザーがそうしているかどうかを確認できます。

+0

それは例外をスローするが、提案のおかげでスローされます。 self.viewTable.decelerating以外は空のセルを返すことで少しの速度を抑えますが、十分ではありません。たとえ何があっても空のセルを返すだけでも、それは十分に速くはありません。 – Randall

関連する問題