在dispatch_async中的NSManagedObjectContext performBlock

时间:2012-12-30 15:19:38

标签: objective-c cocoa core-data grand-central-dispatch nsmanagedobjectcontext

我正在使用GCD进行一些后台处理,并使用Core Data保存一些对象。在方法[self saveData]中,我创建了一个并发类型为NSManagedObjectContext的{​​{1}},以便在后台线程上执行核心数据操作。我正在NSPrivateQueueConcurrencyType内运行所有核心数据操作。

现在,是否有必要从主线程调用performBlock或者我可以继续使用后台线程(以避免额外调用[self saveData]

像这样:

dispatch_async(dispatch_get_main_queue(), ^{});

或者我需要这样做:

dispatch_async(dispatch_get_global_queue(0, 0), ^{

    BOOL isProcessed = [self processData];
    if (isProcessed) {

        // Save with Core Data
        [self saveData];
    }
});

1 个答案:

答案 0 :(得分:4)

performBlock:performBlockAndWait:确保在为上下文指定的队列上执行块操作。因此,调用哪个线程performBlock:performBlockAndWait:无关紧要。

如果dispatch_async(dispatch_get_main_queue(), ^{});使用[self saveData]进行所有操作,则不需要额外的performBlock:

相关问题