2012-05-02 18 views

回答

4

是;只需創建隊列DISPATCH_QUEUE_SERIAL(這也是默認值)。但要小心將核心數據操作移到另一個線程上。給定的NSManagedObjectContext只能用於單個線程,因此您需要兩個上下文,一個用於主線程,另一個用於後臺線程。正確地做到這一點可能需要謹慎。

您可能想要調查UIManagedDocument(如果這是iOS5),它會爲您完成大部分工作。至少您應該閱讀其文檔,以便了解如何使用父級和子級環境進行多線程。

+0

這個答案似乎已過時。從文檔:「串行隊列(也稱爲私有調度隊列)按照它們被添加到隊列中的順序每次執行一個任務。當前正在執行的任務運行在不同的線程上(**,其可以從任務到任務**),由調度隊列管理「 – Andreas

0

當創建一個託管對象上下文時,您可以指定它的併發類型。如果您指定了NSPrivateQueueConcurrencyType或NSMainQueueConcurrencyType,那麼MOC已經負責在自己的線程上運行。具體而言...

NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; 
// Do other MOC initializations stuff... 
[moc.performBlock:^{ 
    // All code in this block will run in the proper thread for the Managed Object Context. 
}]; 

FWIW,NSMainQueueConcurrencyType的工作原理是一樣的,但它被連接到主隊列。您不能在使用NSConfinementConcurrencyType創建的MOC上調用performBlock,創建和所有工作必須發生在同一個線程中。在這種情況下,你需要創建自己的隊列。

相關問題