【发布时间】:2014-04-08 21:19:03
【问题描述】:
当我向我的 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 队列似乎应该至少避免主线程,如果没有单个转到线程。我有一些奇怪的错误,所以我需要弄清楚发生了什么。谢谢!
【问题讨论】: