एक नया एमओसी जिसके लिए आप तुल्यकालन के पूर्ण नियंत्रण है बनाएँ। यह init
और पूर्व-अभिभावक/बाल संबंधों के समान व्यवहार के समान है।
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc]
initWithConcurrencyType:NSConfinementConcurrencyType];
आप माता-पिता अपनी संपत्ति की स्थापना करके एक और एमओसी के लिए एक एमओसी:
moc.parentContext = someOtherMocThatIsNowMyParent;
यहाँ, बच्चे माता-पिता के लिए चुनता है। मुझे यकीन है कि मेरे बच्चे चाहते हैं कि वे NSManagedObjectContexts थे। एक मूल संदर्भ NSPrivateQueueConcurrencyType
या NSMainQueueConcurrencyType
का होना चाहिए।
आप एक एमओसी वह यह है कि एक निजी कतार में "बाध्य" बना सकते हैं:
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc]
initWithConcurrencyType:NSPrivateQueueConcurrencyType];
आप केवल performBlock
या performBlockAndWait
एपीआई के माध्यम से इसे उपयोग करना चाहिए जिसका मतलब है। आप उन विधियों को किसी भी धागे से कॉल कर सकते हैं क्योंकि वे ब्लॉक में कोड के उचित क्रमबद्धता सुनिश्चित करेंगे। उदाहरण के लिए ...
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc]
initWithConcurrencyType:NSPrivateQueueConcurrencyType];
moc.parentContext = someOtherMocThatIsNowMyParent;
[moc performBlock:^{
// All code running in this block will be automatically serialized
// with respect to all other performBlock or performBlockAndWait
// calls for this same MOC.
// Access "moc" to your heart's content inside these blocks of code.
}];
performBlock
और performBlockAndWait
के बीच अंतर यह है कि performBlock
कोड का एक खंड का निर्माण करेगा, और ग्रांड सेंट्रल डिस्पैच के साथ शेड्यूल किसी अज्ञात धागे पर, भविष्य में कभी न कभी एसिंक्रोनस रूप से निष्पादित किया जाना है । विधि कॉल तुरंत वापस आ जाएगी।
performBlockAndWait
अन्य सभी performBlock
कॉल के साथ कुछ जादू सिंक्रनाइज़ेशन करेगा, और जब इस से पहले प्रस्तुत किए गए सभी ब्लॉक किए जाते हैं, तो यह ब्लॉक निष्पादित होगा। इस कॉल को पूरा होने तक कॉलिंग थ्रेड पेंड करेगा।
आप एक एमओसी भी बना सकते हैं जो मुख्य थ्रेड के लिए "बाध्य" है, जैसे निजी सहमति।
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc]
initWithConcurrencyType:NSMainQueueConcurrencyType];
moc.parentContext = someOtherMocThatIsNowMyParent;
[moc performBlock:^{
// All code running in this block will be automatically serialized
// with respect to all other performBlock or performBlockAndWait
// calls for this same MOC. Furthermore, it will be serialized with
// respect to the main thread as well, so this code will run in the
// main thread -- which is important if you want to do UI work or other
// stuff that requires the main thread.
}];
आप केवल यह सीधे का उपयोग करना चाहिए यदि आप जानते हैं कि आप मुख्य थ्रेड, याperformBlock
या performBlockAndWait
एपीआई के माध्यम से कर रहे हैं, जिसका मतलब है।
अब, आप "मुख्य संगामिति" एमओसी या तो उपयोग कर सकते हैं performBlock
विधियों के माध्यम से, या सीधे यदि आप जानते हैं आप पहले से ही मुख्य थ्रेड में चल रहे हैं।
ऐसे (अविश्वसनीय) पूर्ण उत्तर के लिए धन्यवाद। – RonLugge
हैलो, मुझे पता है कि यह वास्तव में पुराना है, लेकिन मेरा सवाल एक नया निर्माण करने के लिए काफी बड़ा नहीं है, मैं सोच रहा था कि मुझे प्रदर्शनबैक या बाहर के अंदर संदर्भ पर कहां से कॉल करना चाहिए? धन्यवाद ! – ItsASecret
प्रदर्शन के अंदर –