8

我想使用 anNSOperationQueue来调度 CoreData 操作。但是,操作队列的行为并不总是相同的(例如,它libdispatch在使用线程池的 iOS 4.0/OS 10.6 上调度)并且队列可能并不总是使用相同的线程(根据NSManagedObjectContext需要)。

我可以强制串行NSOperationQueue在单个线程上执行吗?还是我必须为此创建自己的简单排队机制?

4

2 回答 2

4

我可以强制串行 NSOperationQueue 在单个线程上执行吗?还是我必须为此创建自己的简单排队机制?

你不应该做其中任何一个。Core Data 真正需要的是,您没有两段代码同时更改托管对象上下文。在Concurrency with Core Data的开头甚至有一个注释:

注意:您可以使用线程、串行操作队列或调度队列进行并发。为了简洁起见,本文始终使用“线程”来指代其中的任何一个。

真正需要的是在给定的上下文中序列化操作。如果您使用单个线程,这自然会发生,但是如果您设置maxConcurrentOperationCount为 1,NSOperationQueue 也会对其操作进行序列化,因此您不必担心确保所有操作都发生在同一个线程上。

于 2012-07-15T02:27:45.823 回答
0

Apple 决定将托管对象绑定到真正的线程。在不同线程上访问上下文不再那么安全了——没有任何对象的上下文可能是安全的,但它的对象不是

于 2012-11-02T08:53:51.183 回答