2014-09-23 8 views
22

केवल (और सबसे हाल ही में) मैं खोजने हूँ परिणाम के बारे में सर्वोत्तम प्रथाओं यहां हैं: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdConcurrency.htmlअद्यतन कोर डेटा समवर्ती दस्तावेज? है बेस्ट कोर डेटा के साथ संगामिति के लिए प्रथाओं:

हालांकि, पृष्ठ के सबसे ऊपरी कहते हैं,

"महत्वपूर्ण इस दस्तावेज़ को लिखा गया था क्योंकि नाटकीय रूप से बदल गया; कृपया ध्यान दें कि यह अध्याय वर्तमान अनुशंसाओं का प्रतिनिधित्व नहीं करता है। "

कोर डेटा के साथ समवर्तीता के लिए मुझे और अधिक वर्तमान दस्तावेज़ कहां मिल सकता है?

+0

यह ऐप्पल दस्तावेज नहीं है, लेकिन आप इसे सहायक पा सकते हैं: http://quellish.tumblr.com/post/97430076027/a-real-guide-to-core-data-concurrency – quellish

+0

इसके लिए एक बिलियन वोट सवाल। – Benjohn

उत्तर

7

सबसे अच्छी चर्चा अब NSManagedObjectContext documentation के भीतर 'Concurrency' के अंतर्गत है।

मेरा सारांश:

थ्रेड कैदीकरण अभी भी आवश्यक है। आईओएस 5/ओएस एक्स v10.7 द्वारा पेश किए गए बड़े बदलाव यह थे कि संदर्भ अब माता-पिता के रूप में अन्य संदर्भ हो सकते हैं और अपनी सीरियल कतारों का प्रबंधन कर सकते हैं।

परिवर्तन स्वचालित रूप से सहेजे जाने पर बच्चों से माता-पिता में स्थानांतरित हो जाते हैं। अब यह क्या बचाता है मतलब है। केवल तभी जब आपका माता-पिता लगातार स्टोर होता है तो आप वास्तव में डिस्क पर काम कर रहे हैं।

तो अधिसूचनाओं द्वारा सिंक्रनाइज़ करने के बारे में वह सब कुछ है जो ऐप्पल नहीं चाहता कि आप अनुसरण करें। उन सभी तंत्र अभी भी उपलब्ध हैं लेकिन ऐप्पल ने ढांचे में सीधे सबसे आम पैटर्न खींचा है।

+0

"थ्रेड कैदीकरण अभी भी आवश्यक है।" यह मामला बिल्कुल नहीं है, और कुछ समय के लिए धागा बंधन अप्रचलित कर दिया गया है। क्यू कन्फिनेशन थोड़ी देर के लिए अनुशंसित प्रतिमान किया गया है। – quellish

+0

इसके विपरीत, ऐप्पल ने हमेशा स्पष्ट रूप से कहा है: "नोट: आप थ्रेड, सीरियल ऑपरेशन कतार, या समेकन के लिए प्रेषण कतारों का उपयोग कर सकते हैं। संक्षेप में, यह आलेख इनमें से किसी भी संदर्भ के लिए" थ्रेड "का उपयोग करता है।" कोर डेटा के बारे में बात करते समय, थ्रेड कैदी और कतार बंधन समानार्थक होते हैं, पूर्व में पसंदीदा वाक्यांश - सटीक या अन्यथा। – Tommy

+0

जिस दस्तावेज़ का आप उल्लेख कर रहे हैं वह पुराना है, और कतार बंधन शुरू होने से पहले अच्छी तरह से लिखा गया था। यही कारण है कि दस्तावेज़ के शीर्ष पर आप यह उद्धृत कर रहे हैं कि "इस दस्तावेज़ को लिखा गया था, इसलिए कोर डेटा के साथ समवर्तीता के लिए सर्वोत्तम अभ्यास नाटकीय रूप से बदल गए हैं; कृपया ध्यान दें कि यह अध्याय वर्तमान अनुशंसाओं का प्रतिनिधित्व नहीं करता है।" थ्रेड कैदीकरण और कतार बंधन सीडी समरूपता के लिए अलग-अलग प्रतिमान हैं - वे समानार्थी नहीं हैं। – quellish

2

थ्रेड कैदीकरण अप्रचलित कर दिया गया है। आप NSManagedObjectContext के लिए शीर्ष लेख में यह देख सकते हैं:

NSConfinementConcurrencyType  = 0x00, /* this option is obsolete and not recommended for new code. */ 

जब एक संदर्भ -init के साथ बनाया गया है, यह तर्क NSConfinementConcurrencyType साथ प्रारंभकर्ता -initWithConcurrencyType: कहता है। यह समेकन पर कोर डेटा प्रोग्रामिंग गाइड अनुभाग में वर्णित थ्रेडिंग मॉडल है, जिसे अप्रचलित कर दिया गया है और कुछ समय के लिए अनुशंसित नहीं किया गया है। एक कोर डेटा इंजीनियर के शब्दों में "यह अभी काम नहीं किया।"।

दुर्भाग्य से कोर डेटा प्रोग्रामिंग गाइड को समवर्ती और अन्य प्रगति के लिए वर्तमान अनुशंसित सर्वोत्तम प्रथाओं का वर्णन करने के लिए अद्यतन नहीं किया गया है। लेकिन हे, कम से कम यह आपको लॉकिंग का उपयोग करने के लिए नहीं कह रहा है!

Incremental Store Programming Guide हाल ही में अपडेट किया गया है। यह वर्णन करता है कि एनएसआईएनक्रमेंटलस्टोर को कैसे कार्यान्वित किया जाए, और ऐसा करने में कोर डेटा के कुछ आंतरिकों को समझाते हुए बहुत अच्छा काम होता है। उदाहरण के लिए, यह बताता है कि कोर डेटा प्रोग्रामिंग गाइड की तुलना में कोई गलती क्या है और दोषों को कितना बेहतर निकाल दिया गया है। पिछले several years के लिए कोर डेटा रिलीज नोट्स में सर्वोत्तम प्रथाओं के बारे में कुछ अद्यतन जानकारी शामिल है, और कोर डेटा के लिए प्रासंगिक कई तकनीकी नोट्स हैं।

डब्ल्यूडब्ल्यूडीसी में पिछले कई वर्षों में सबसे अच्छी जानकारी "कोर डेटा में नया क्या है" सत्र रहा है। समवर्तीकरण के लिए, आपको इन डब्ल्यूडब्ल्यूडीसी सत्रों को देखना चाहिए:

WWDC 2011 What's new in Core Data on MacOS X। मैकोज़ एक्स सत्र आईओएस सत्र की तुलना में थोड़ा अधिक विस्तृत था।

और

WWDC 2012 Core Data Best Practices

मैं कोर डेटा प्रोग्रामिंग गाइड पृष्ठों पर 'प्रतिक्रिया' बटन का उपयोग करने के लिए प्रोत्साहित करेंगे, या एक रडार बग प्रलेखन के लिए पूछ फ़ाइल अद्यतन करने की।

0

मैं जिस मार्गदर्शिका का पालन कर रहा हूं वह यहां है: http://www.cocoanetics.com/2012/07/multi-context-coredata/ भले ही यह 2012 में लिखा गया था, फिर भी यह अभी भी मेल खाता है जो मैंने वर्तमान में उपयोग किया है। यह आपको NSMainQueueConcurrencyType के साथ एक मुख्य अभिभावक संदर्भ स्थापित करने में मदद करता है, NSPrivateQueueConcurrencyType के साथ कई पृष्ठभूमि संदर्भ, और पृष्ठभूमि लेखक संदर्भ भी है जिसमें लगातार स्टोर है।

एक्सकोड 6 और योसामेट को कोर डेटा डीबगिंग में भी सुधार हुआ प्रतीत होता है: http://oleb.net/blog/2014/06/core-data-concurrency-debugging/। यह सही जगह पर प्रदर्शनब्लॉक का उपयोग करने के तरीके को समझने में उपयोगी था।

3

आईओएस 9/ओएस एक्स एल कैपिटन के लिए कोर डेटा प्रोग्रामिंग गाइड अपडेट किया गया है। https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Conceptual/CoreData/Concurrency.html देखें।

मुझे WWDC 2014 session 225 What's new in Core Data (22:50 बजे) भी वर्तमान और ऐतिहासिक समरूपता विधियों को समझने में बहुत उपयोगी पाया गया।