当我向performBlock我的 MOC 类型发送消息时NSPrivateQueueConcurrencyType,如下所示:
[self.privateManagedObjectContext performBlockAndWait:^{
if ([[NSThread currentThread] isMainThread]) {
NSLog(@"executing on the main thread!!");
}
…
}];
Run Code Online (Sandbox Code Playgroud)
我发现,默认情况下,这在主线程上执行。上述代码中的条件触发,并且问题导航器指示正在执行Thread 1的NSManagedObject Queue.
这让我很困惑,因为 Apple 告诉我们“每个线程必须有自己完全私有的托管对象上下文”。鉴于类型的 MOCNSMainQueueConcurrencyType将使用主线程,它是否违反NSPrivateQueueConcurrencyType了使用主线程类型的 MOC 的线程限制?
我的代码在主线程上执行正常吗?我误解了线程限制吗?我知道队列不一定绑定到特定线程,但在这种情况下,私有 MOC 队列似乎至少应该避免主线程,如果没有单个转到线程。我有一些奇怪的错误,所以我需要弄清楚发生了什么。谢谢!
这种优化是可能的,因为同步performBlockAndWait:执行块
,即该方法在块完成之前不会返回。因此该块不会与主线程上的其他操作并行执行。
(出于同样的原因,dispatch_sync(queue, ...)可能会在主线程而不是单独的线程上执行块。)
| 归档时间: |
|
| 查看次数: |
960 次 |
| 最近记录: |