2012-06-05 42 views
3

我慢慢遷移到iOS 5中核心數據的新API,我調查大約NSConfinementConcurrencyType移植到iOS 5中核心數據的新API:瞭解NSConfinementConcurrencyType

從蘋果文檔

坐月子(NSConfinementConcurrencyType)。這是默認設置。您保證上下文不會被您創建它的 以外的任何線程使用。 (這是完全一樣的線程 要求你已經在以前的版本中使用。)

的事情是不是真的明顯,我是默認在這方面的意思。它的真正含義是什麼?

通常情況下,如果我需要執行CD很長的導入操作,我成立了一個新的NSOperation類和我創建自己的上下文。現在

- (void)main 
{ 
    NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init]; 

    // other code here... 
} 

,我可以趁父上下文,並做到以下幾點:

- (void)main 
{ 
    NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init]; 
    [moc setParentContext:[self masterMoc]]; 

    // other code here... 
} 

說這話時,約NSConfinementConcurrencyType什麼?什麼可能是一個典型的使用示例?

預先感謝您。

回答

4

Flex_Addicted,

通過「默認情況下,」蘋果公司表示,這是標準的方式核心數據MOCS一直工作。 MOC必須在使用它的線程上創建。在上面的代碼中,您遵循標準的歷史有效的MOC使用模式。其他樣式的MOC創建並管理自己的後臺隊列或綁定到主隊列。這可以簡化一些事情。或不。首先,它們是面向MOC的面向塊的接口。有時候這很好。 (儘管塊是新的熱點,但它們並不是一個非合作的好東西,我看到了懶惰的程序員編寫的面向塊的代碼,它們在方法中留下了太多的複雜性,通過微妙的交互來維護這些代碼可能非常困難。 )

一個父上下文的想法是正交於該線程禁閉。父上下文是快速關聯MOC所需的大部分參數的一種方法。 (蘋果公司並不清楚MOC之間實際發生了什麼,也沒有討論合併政策問題。)我相信,你們仍然需要趕上MOC間的通知。

如果我可以建議,不要過度考慮這些事情。 Lion/iOSv5的核心數據變化非常小。

Andrew

+0

+ 1爲您的支持。那麼,是否像我在第二個片段中創建背景一樣創建了一個限制環境?謝謝。 –

+0

With *父上下文的思想與線程限制的思想是正交的。*你是否說我需要繼續在主線程中監聽通知?據我瞭解,當我保存在後臺上下文中時,保存不會寫入磁盤,而是寫入內存。這是否保存合併兩個上下文? –

+0

Flex_Addicted,'NSConfinementConcurrencyType'是默認的上下文類型。因此,一個'NSManagedObjectContext.new'創建一個這樣的類型。您需要使用更具體的初始化程序「-initWithConcurrencyType:」來獲取任何其他類型的MOC。Andrew – adonoho