2013-03-07 1 views
5

こんにちは私は現在、次の性質を有していたアプリ構築しています:iOSでデータを取得する別々のスレッドをどう扱うのですか?

  1. は時間
  2. で一つのアイテムを表示するフィードを持つストレージのためのコアデータを使用した項目のうちあれば、アプリが呼び出されますサーバから非同期にフェッチする

非同期フェッチを扱うことはやや難解です。

現在、サーバーからフェッチされたアイテムをコアデータに直接格納しています。

アプリが新しいアイテムを必要とするたびに、目に見えないアイテムについてCore Dataに問い合わせています。

このようなコアデータのクエリが原因で、アプリケーションのパフォーマンスが大幅に低下することがあります。

私たちはメモリ内の配列を使用してインデックスを保持することを考えましたが、項目がなくなると取り出しの非同期的な側面は、ロックや他の並行処理手段を使用して配列スレッド安全。

コアデータへの総呼び出しをどのように減らすことができますか?

+2

あなたのアプリをプロファイリングして、フェッチが遅いことを確認しましたか? –

+2

どのような並行性タイプを使用していますか? – mattyohe

+1

パフォーマンスの問題の症状は何ですか? CoreDataはMOCに独自のキャッシングシステムを備えています。 – Jeremy

答えて

0

永続ストアへのトリップを最小限に抑え、表示すると予想されるアイテムを適切な数だけ取得する必要があります。コアデータは管理対象オブジェクトのフォールディングで非常に効率的であるため、メモリフットプリントは問題ではありません。

表示するアイテムが不足しているにもかかわらず、アレイに残っているアイテムが残っている場合は、もう少しフェッチしてください。

この時点で結果が得られない場合は、独自の管理対象オブジェクトコンテキストを使用して非同期キューをディスパッチし、新しい管理対象オブジェクトを作成し、変更をマージできるようにメインコンテキストを保存して通知します。

これが完了したら、新しいアイテムをフェッチすることに戻ります。

関連する問題