NSOperationQueue指定线程

时间:2012-07-14 19:46:38

标签: objective-c cocoa-touch cocoa core-data

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

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

2 个答案:

答案 0 :(得分:4)

  

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

你不应该做任何一个。核心数据真正需要的是您没有两段代码同时对托管对象上下文进行更改。在Concurrency with Core Data的最开始,甚至还有一个注释:

  

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

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

答案 1 :(得分:-1)

Apple决定将托管对象绑定到真正的线程..它不再安全地访问不同线程上的上下文 - 没有任何对象的上下文可能是安全的但它的对象不是