7

ここ数日、バッチ サイズが 20 の NSFetchedResultsController が、フェッチが終了した直後にすべてのオブジェクトで常にフォールトする (つまり、メモリにロードする) 理由について、謎を解こうとしてきました。 ~ 20 秒かかります。

私のheightForRowAtIndexPathでは、高さはフェッチされた各オブジェクトのNSStringプロパティの長さに基づいていたため、テーブルをリロードすると、テーブルに2000行がある場合、高さは行ごとに計算されますオブジェクトのテキスト プロパティにアクセスするため、最初に 2000 個のオブジェクト (20 サイズのバッチ) でエラーが発生し、永遠に時間がかかります。(行の高さが最初に計算されることを知りませんでした)。

問題は、バッチ サイズが 20 のフェッチ結果コントローラーがある場合、行の高さがオブジェクトのテキスト プロパティに基づいている場合です。実際にメモリにロードされた場合、高さを計算するための回避策は何ですか?

私のオプションは何ですか?

4

2 に答える 2

2

興味深い質問です。パフォーマンスを向上させるために行うことは、その文字列テキストの長さを格納するプロパティをモデルに作成することです。このようにして、その場で各行の長さを計算する必要はありませんが、事前に計算された高さがあります。

他にも価値のある解決策があるかもしれません。

于 2012-06-23T15:47:51.660 に答える
-1

上記の高さの計算を担当するビューコントローラークラスに静的メソッドを作成します。この関数を提供するために必要なのは NSString だけであり、簡単に計算できる CGFloat を返す必要があります。このメソッドを使用して、要素をインスタンス化せずに要素の必要な高さを返します (ここで必要なのは、テキストのメタデータだけです)。

于 2012-06-23T15:44:17.947 に答える