0

View Controller にメソッド「books」があり、コア データ内のすべての本を取得して、それらの配列を返します。私は頻繁に self.books に依存しています。特定のインデックスにある本、何冊の本があるかなどを知る必要がある場合、books メソッドは結果を再フェッチします。

これらの結果を iVar にキャッシュすると、パフォーマンスが向上しますか? ほとんどの場合、self.books の結果が変わらないことはわかっています (objectAtIndex、count など)。2 つ目のブール値 iVar 'booksNeedRefresh' をダーティ フラグとして追加し、本を追加/削除する場合にのみ true に設定できます。その後、self.books はこのフラグをチェックし、必要な場合にのみ再取得できます。

私の質問は次のとおりです。

  1. コア データからの各フェッチ リクエストは、無視できないパフォーマンス ヒットをもたらしますか?
  2. キャッシュ + ダーティ フラグは賢明な解決策ですか?
4

1 に答える 1

2

あなたは間違った方向に進んでいると思います。Core Dataはすでに多くのメモリ管理を提供しているため、「ダーティ」フラグなどは必要ありません。

最も明白な解決策は、を使用することNSFetchedResultsControllerです。その主な目的は、メモリフットプリントを小さく保ちながら、テーブルビューでデータを表示することですが、他の目的にも使用できます。あなたの本の配列はになり_fetchedResultsController.fetchedObjects、FRCはメモリとフェッチの間の最適化を処理します。

原則としてあなたの質問に答えるために、上記のトレードオフはまさに問題です、それであなたはそれについて考えるのが正しいです。頻繁なフェッチはパフォーマンスに影響します。

于 2012-08-18T06:03:51.860 に答える