Utility.managedObjectContext().performBlockAndWait({
})
dispatch_sync(dispatch_get_main_queue(), {
})
.MainQueueConcurrencyType
选项创建的。答案 0 :(得分:0)
你在这里混合了两个完全不同的概念,但由于它是主线程/上下文/队列,你的混合被屏蔽了,并且#34;工作"。
托管对象上下文的performBlockAndWait:
和performBlock:
方法不保证块执行哪个线程,只保证访问/变异的数据被安全访问。由于您的上下文是主队列并发类型,因此它是一个例外,因为只在主线程上触摸performBlockAndWait:
和performBlock:
方法之外的对象是安全的。因此,当您将块排队以在主队列上运行时,它可以保证在主线程上运行,因此您的数据是安全的。
主线程上的块执行不是原子的。否则,多线程的重点是什么?为确保数据安全,访问数据时必须调用performBlockAndWait:
和performBlock:
方法。您可以保证主队列调度块不会被其他主队列调度块不间断地运行,并且托管对象上下文队列(后台或主)是串行的,因此只允许一个块同时访问数据。