NSOperationQueue指定线程

Eri*_*ner 8 cocoa cocoa-touch core-data objective-c

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

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

Cal*_*leb 4

\n

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

\n
\n\n

您不需要执行其中任何一项操作。Core Data 真正需要的是您没有两段代码同时对托管对象上下文进行更改。在Concurrency with Core Data的开头甚至有这样的注释:

\n\n
\n

注意:您可以使用线程、串行操作队列或调度队列来实现并发。\n 为了简洁起见,本文始终使用 \xe2\x80\x9cthread\xe2\x80\x9d 来指代其中任何一个。

\n
\n\n

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

\n

  • 警告:这个答案是“错误的”!Coredata 每个线程需要一个上下文(真实的!) (4认同)