Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
46
Help us understand the problem. What is going on with this article?
@hongmhoon

CoreDataによる並列処理

More than 5 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

46
Help us understand the problem. What is going on with this article?
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
gunosy
情報キュレーションサービス「グノシー」や「ニュースパス」の開発・運営を通じて、情報を世界の人に最適に届けていきます。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
46
Help us understand the problem. What is going on with this article?