Help us understand the problem. What is going on with this article?

CoreDataによる並列処理

More than 3 years have passed since last update.

CoreDataによる並列処理

注意点

基本的に以下の2点に注意する必要がある。

  • NSManagedObjectContextはスレッドセーフではない
  • NSManagedObjectはスレッドセーフではない

ベストプラクティス

  • NSManagedObjectContextはスレッド(キュー)を指定して生成する。
// メインスレッド用のNSManagedObjectContext
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];

// バッググラウンドスレッド用のNSManagedObjectContext
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
  • NSManagedObjectContext及びNSManagedObjectの利用はperformBlock:又はperformBlockAndWait:のブロック内部で行う。
// 非同期で処理を行う
[moc performBlock:^{
    // 非同期処理
    [moc save:nil];
}];

// 同期で処理を行う
[moc performBlockAndWait:^{
    // 同期処理
    [moc save:nil];
}];
  • NSManagedObjectContextを親子関係で利用する。

Multi-Context CoreData

*公式ドキュメントであるCore Dataプログラミングガイド - Apple DeveloperCore Dataによる並列処理を確認すると先頭に以下のように書いてあって参考にならない。

Important: Core Dataによる並列処理のべストフラクティスは、この資料を執筆した当時から大き く変わりました。現在てはこの章の内容を推奨していませんので注意してくたさい。

デバッグ(←これが重要)

Xcodeの起動時引数に-com.apple.CoreData.ConcurrencyDebug 1を指定して起動すると並列処理違反時に例外が発生して教えてくれる。

coredata_debug.png

詳細はCore Data Concurrency Debugging

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away