繁体   English   中英

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

[英]why does NSManagedObjectContext Queue execute on main thread?

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

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

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

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

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

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

(出于同样的原因, dispatch_sync(queue, ...)可以在主线程上执行块而不是单独的线程。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM