- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当我向类型为 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/
有人可以向我澄清主线 DHT 规范中的声明吗? Upon inserting the first node into its routing table and when starting up th
我正在尝试使用 USB 小工具驱动程序使嵌入式设备作为 MTP 设备工作。 我知道 Android 从大容量存储设备切换到 MTP 设备已经有一段时间了,并且找到了 source code for M
我是一名优秀的程序员,十分优秀!