heightForRowAtIndexPath
多数のセルがある場合、非常にコストのかかる操作です。私の場合、何千もあるので、テーブルをバッチで分割して、一度に 50 セルだけを表示し、ユーザーがテーブル ビューの境界の終わりに近づくと、insertRowsAtIndexPaths:
さらに 50 行を挿入するために使用すると考えました。ただし、50 個の新しい行を挿入するたびに、挿入heightForRowAtIndexPath
したばかりの行だけでなく、テーブルのすべての行に対して呼び出されます。これは予想される動作ですか?どうしてこれなの?行の高さは、フォントを使用して文字列の高さを計算する必要があるため、新しい行を挿入するたびにテーブル全体の高さを計算するのは非常に非効率的です。回避策はありますか?
2 に答える
これは予想される動作ですか?どうしてこれなの?
はい。これにより、高さの異なる行を1つのテーブルに挿入できます。
回避策はありますか?
すべての行の高さが等しい場合は、初期化中に1回だけ高さを計算します。
が呼び出されるたびheightForRowAtIndexPath
に、キャッシュされた結果を返すだけです。
@アンに同意します。テーブル内の行の位置 (単なるスクロール ビュー) は、その上の行の位置と高さによって確立されるため、呼び出す必要があります。
そして、@Anne の処方箋もかなり正しいので、高さのメソッドをできるだけ速く実行することになります。
しかし、本当の問題はあなたです。あなたが尋ねるべき「パフォーマンス」の質問は、何千もの行をざっと見て、人間のパフォーマンスに関するものだと思います。
親指の 1 回のフリックで 10 行をスクロールでき、1 秒で実行できるとしましょう。これは 1000 分の 1.5 分です。アプリを使用して 1 日 1 回 5,000 行をスクロールする 100 万人のユーザーは、毎年 190 万労働日を消費し、それに比例して国内 GDP が減少します。
最大限の成功をお祈りしますが、何千もの UITableView 行を含むアプリを配布する前に、世界経済の不安定な状態を考慮してください。