0

タイトルが示すように、ViewController によって仲介される FetchedResultsController に接続されている UITableView を使用しています。

遅延は、ユーザーがグリッドの下部近くまでスクロールし、ユーザーに表示するデータをさらにフェッチするときに発生します。データが受信され、テーブルビューのコンテンツが大きくなると、スクロールが一時的に一時停止し、その後少しスタッタリングが続き、スクロールバーが高くジャンプして、最終的にすべてがスムーズに戻ります。これは次の場所で発生します。

-(void)controllerDidChangeContent:(FetchedResultsController *)controller {
    [tableView reloadData];
}

AppleのドックとSOを精査して見つけたすべての最適化を行いました。

  1. 必要に応じてビューを再利用します。これは、パフォーマンスに最も役立ちました。セルの初期化はほとんどヒットしません。

  2. imageview を使用する前に、バックグラウンド スレッド (コンテキストで描画) で画像をデコードします。(セルの「ロード」UIを置き換える画像を取得する前に、スタッターが発生することに注意してください)。

  3. 非常に短くて速いデリゲート メソッド。

  4. 不透明な手描きのビュー。

UI スレッドをブロックせず、スクロールバーのジャンプを防止する UITableView への行の追加の処理に関する推奨事項はありますか? [tableView insertRows...] を使用してみましたが、同じ吃音とスクロールバーのジャンプが発生しました。これは奇妙だと思いました。

乾杯、ゼッド

4

1 に答える 1

0

これは、実際には UITableView が行うのは非常に自然なことです。残念ながら、優雅ではありません。アプリが継続的にデータを取得してリロードしている場合、それもパフォーマンスに影響します。私はあなたの理論をテストし、NSMutableArray を使用して UITableView を手動で設定しました。私は配列にいくつかの値を与えましたが、それはそれを遅らせるのに十分でした. (追加のメソッドは含まれていないことに注意してください。reloadData も含まれていませんでした。基本的なデリゲート メソッドのみです)。

于 2012-07-13T10:13:17.477 に答える