2017-06-01 13 views
3

正如標題所說,問題是,如果帶有併發類型NSPrivateQueueConcurrencyTypeNSManagedObjectContext是串行或併發的。NSPrivateQueueConcurrencyType串行或併發?

更具體地說,如果我叫

[managedObjectContext performBlock:^{ 

}]; 

具有長期運行的任務,將與performBlock這方面其他呼叫被阻塞,直到第一個完成了嗎?

回答

2

我不相信這是記錄任何方式。但是,核心數據通常不是線程安全的,並且performBlockperformBlockAndWait方法是通過將所有核心數據工作放在單個隊列中來處理的方法。因此,如果它是一個併發隊列,我會非常驚訝,因爲整個過程是爲了避免併發。

0

NSMainQueueConcurrencyType使用主隊列。主隊列綁定到主線程,因此是串行的。

主調度隊列是一個全局可用的串行隊列,它執行應用程序主線程上的任務。

2

我在官方文檔中找不到任何證據,但最近我與NSPrivateQueueConcurrencyType一起工作,我記得它是序列號。此外this blog post指出:

當的NSManagedObjectContext與初始化initWithConcurrencyType創建:NSPrivateQueueConcurrencyType]或 - [initWithConcurrencyType:NSMainQueueConcurrencyType]所有訪問的背景和它的管理對象必須經過法 - [performBlock:或 - [performBlockAndWait:]。核心數據使用串行隊列來確保上下文操作按順序執行,並且一次只發生一個操作

相關問題