我一直在阅读苹果文档,但仍有一个问题,我找不到答案。我有一个UIManagedDocument对象,其中有两个嵌套的上下文——主线程上的子上下文和私有线程上的父上下文。接着,我还有一个服务器端。因此,当数据从服务器到达时,我想将其插入到我的托管文档中,并在后台线程中完成。
如果创建异步队列,在其中创建NSManagedObjectContext并将其设置为UIManagedDocument的子上下文(它是在主线程上创建的),这样做是否是安全的?
用其他话来说,如果在主线程创建的私有线程父级上创建了一个上下文,那么将其分配给该上下文是否是线程安全的?
如果创建异步队列,在其中创建NSManagedObjectContext并将其设置为UIManagedDocument的子上下文(它是在主线程上创建的),这样做是否是安全的?
dispatch_queue_t fetchQ = dispatch_queue_create("Data fetcher", NULL);
dispatch_async(fetchQ, ^{
//here goes some code for downloading data from the server
NSManagedObjectContext * backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[backgroundContext setParentContext:self.eventDatabase.managedObjectContext]; // is this thread safe?
//some code for creating objects in backgroundContext
NSLog(@"inserting data in background thread");
});
dispatch_release(fetchQ);
用其他话来说,如果在主线程创建的私有线程父级上创建了一个上下文,那么将其分配给该上下文是否是线程安全的?