[英]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.