gpt4 book ai didi

ios - 为什么 NSManagedObjectContext Queue 在主线程上执行?

转载 作者:可可西里 更新时间:2023-11-01 05:41:09 27 4
gpt4 key购买 nike

当我向类型为 NSPrivateQueueConcurrencyType 的 MOC 发送一个 performBlock 消息时,如下所示:

[self.privateManagedObjectContext performBlockAndWait:^{
if ([[NSThread currentThread] isMainThread]) {
NSLog(@"executing on the main thread!!");
}

}];

我发现,默认情况下,它在主线程上执行。上面代码中的条件触发,问题导航器指示执行发生在 NSManagedObject Queue 中的 Thread 1 上。

这让我很费解,因为 Apple 告诉我们“每个线程必须有自己完全私有(private)的托管对象上下文”。鉴于 NSMainQueueConcurrencyType 类型的 MOC 将使用主线程,是否违反了 NSPrivateQueueConcurrencyType 类型的 MOC 使用主线程的线程限制?

我的代码在主线程上执行是否正常?我误解了线程限制吗?我知道队列不一定与特定线程相关联,但在这种情况下,私有(private) MOC 队列似乎至少应避开主线程,如果没有单个转到线程的话。我有一些奇怪的错误,所以我需要弄清楚发生了什么。谢谢!

最佳答案

这种优化是可能的,因为 performBlockAndWait: 执行 block 同步,即该方法在 block 完成之前不会返回。因此该 block 不会与其他操作并行执行主线程。

(出于同样的原因,dispatch_sync(queue, ...) 可能会在主线程上执行一个 block 而不是单独的线程。)

关于ios - 为什么 NSManagedObjectContext Queue 在主线程上执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22948397/

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