我正在使用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];
}
});
答案 0 :(得分:4)
performBlock:
和performBlockAndWait:
确保在为上下文指定的队列上执行块操作。因此,调用哪个线程performBlock:
或performBlockAndWait:
无关紧要。
如果dispatch_async(dispatch_get_main_queue(), ^{});
使用[self saveData]
进行所有操作,则不需要额外的performBlock:
。