objective-c - dispatch_async 中的 NSManagedObjectContext PerformBlock

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

我正在使用 GCD 进行一些后台处理,并使用 Core Data 保存一些对象。在方法 [self saveData] 中,我创建了一个具有并发类型 NSPrivateQueueConcurrencyTypeNSManagedObjectContext,以在后台线程上执行 Core Data 操作。我正在 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];
    }
});

或者我需要做什么:

dispatch_async(dispatch_get_global_queue(0, 0), ^{

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

        dispatch_async(dispatch_get_main_queue(), ^{

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

最佳答案

performBlock:performBlockAndWait: 确保 block 操作在为上下文指定的队列上执行。因此,调用哪个线程 performBlock:performBlockAndWait: 并不重要。

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

关于objective-c - dispatch_async 中的 NSManagedObjectContext PerformBlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14091878/

相关文章:

objective-c - 带有核心数据,协议(protocol)和读写属性与只读属性声明的怪癖

ios - 为什么我可能需要 2 个或更多 Core Data 模型?

objective-c - 如何从其他类设置 NSStatusBar 标题?

iphone - Xcode自动将对象转换为NSArray

c++ - 方法调用中的静态变量

ios - 找不到托管对象模型

ios - AFNetworking 异步任务 iOS 的返回值

swift - 如何使用 NSVisualEffectView 将窗口与背景混合

objective-c - 指向 NSTreeController 新创建的项目的指针

objective-c - 如何观察来自不同应用程序的通知?