gpt4 book ai didi

objective-c - dispatch_async 中的 NSManagedObjectContext PerformBlock

转载 作者:行者123 更新时间:2023-12-03 16:28:57 24 4
gpt4 key购买 nike

我正在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com