1

私は今、すべてのコアデータがメインスレッドで単一のコンテキストで管理されていることを理解しようとしています。私はインストゥルメントを使用しましたが、保存操作がメインスレッドをかなり長い間ブロックしていることに気付きました。GCD を使用してバックグラウンド スレッドで保存操作を実行したい

これで、新しいスレッド/コンテキストを作成してこのプロセスをセットアップし、「保存」通知をリッスンしてメインスレッドにマージする方法を理解しました。

しかし、新しいコンテキストを作成するとき、メイン スレッドのコンテキストからのすべての変更を新しいものに挿入/マージする必要があります。私はこれの例を見つけることができるようです。

たとえば、私の主なコンテキストでは:

  • 挿入された 2x ユーザー
  • 3つのウォールポストを削除しました
  • 友達関係を更新しました。

これらの変更をバックグラウンド コンテキストに知らせるにはどうすればよいでしょうか。

アプリケーションの起動時にバックグラウンド コンテキストを作成し、メイン スレッドで NSManagedObjectContextObjectsDidChangeNotification をリッスンして、常に同期を維持することは理にかなっていますか??

4

2 に答える 2

1

iOS5 では、新しい同時実行タイプを使用してこれを簡単に行うことができます。NSPrivateQueueConcurrencyType でコンテキストを作成すると、メイン スレッドはブロックされません。ただし、managedObjectContext:performBlock メソッドに渡されたブロック内のコンテキストにアクセスする必要があります。

于 2012-05-27T14:41:01.717 に答える
0

スレッド間で NSManagedObject インスタンスを渡すことはできません。大規模なデータセットに苦労している場合は、Marcus Zarra によるこの投稿を読むことをお勧めします。

于 2012-05-27T13:03:01.293 に答える