7

एसओ (और Apple docs) पर another question में बताया गया है, NSManagedObject उदाहरण NSManagedObjectContext के लिए एक मजबूत संदर्भ नहीं रखते हैं, जिससे वे उत्पन्न हुए। पहले ब्लश पर, यह एक अजीब निर्णय की तरह लगता है, क्योंकि NSManagedObject उदाहरण उनके context के बिना लगभग बेकार हैं, क्योंकि इससे faults not firing when they should जैसे भ्रमित बग की ओर जाता है।क्यों NSManagedObject उदाहरणों को उनके NSManagedObjectContext के लिए एक मजबूत संदर्भ नहीं है?

क्या कोई इस मामले में कुछ पृष्ठभूमि प्रदान कर सकता है? क्या NSManagedObject सबक्लास को कार्यान्वित करना खतरनाक होगा जो स्वचालित रूप से NSManagedObjectContext के लिए एक मजबूत संदर्भ रखता है?

संपादित करें: इस प्रश्न के महान उत्तरों के लिए धन्यवाद, मैंने पाया है कि मेरी प्रबंधित वस्तुओं को जानबूझकर अस्थायी NSManagedObjectContext के द्वारा RestKit द्वारा बनाया गया था। यह मेरे अगले प्रश्न में है, RestKit के लिए विशिष्ट, here

उत्तर

4

यह NSManagedObjectContext के लिए NSManagedObject एस के आसपास के अन्य तरीकों के मुकाबले अधिक समझ में आता है।

ध्यान रखें कि संदर्भ ड्रॉ पैड की तरह इसकी सभी वस्तुओं के साथ है। यदि वह संदर्भ दूर हो जाता है, तो ऑब्जेक्ट्स अब मान्य नहीं हैं। यदि ऑब्जेक्ट्स संदर्भ के स्वामित्व में हैं, तो संदर्भ दूर जाने से ऑब्जेक्ट्स के लिए कुछ भी नहीं होगा और वे अभी भी वैध मानते हैं। दूसरे शब्दों में: एक संदर्भ वस्तुओं के बिना मौजूद हो सकता है, वस्तुएं संदर्भ के बिना मौजूद नहीं हो सकती हैं।

बेशक, एक हाइब्रिड मॉडल (जहां एक संदर्भ अपने ऑब्जेक्ट्स और ऑब्जेक्ट्स का मालिक होता है) काम नहीं करेगा, क्योंकि तब आप एक बनाए रखने वाले चक्र में भाग लेंगे।

NSManagedObject उदाहरणों (हालांकि जरूरी नहीं) उनके संदर्भ

वे हो सकता है बिना लगभग बेकार हैं, लेकिन याद रखें कि वे अपने संदर्भ के लिए एक संदर्भ है! संभवतः यह एक कमजोर संदर्भ है, लेकिन फिर भी एक संदर्भ है। यदि वह संदर्भ शून्य देता है, ऑब्जेक्ट अमान्य है। यदि आप सुनिश्चित करते हैं कि आपका संदर्भ आसपास रहता है (जो मैंने दूसरे प्रश्न के उत्तर में किया है), तो आपको कोई समस्या नहीं होगी।

3

ऐसा इसलिए है क्योंकि आपको अन्यथा चक्र बनाएगा। प्रबंधित ऑब्जेक्ट संदर्भ आंतरिक रूप से सरणी और अन्य कंटेनरों का उपयोग करता है जिनमें प्रबंधित वस्तुओं के संदर्भ होते हैं।

संभवतः, यह बनाए रखने चक्र को कोर डेटा के आंतरिक कार्यान्वयन से आसानी से "स्पष्ट रूप से टूटा" नहीं किया जा सकता है, ताकि यह संदर्भ कमजोर हो।

+0

सोफे डेवलपर सही है, और हां, एक प्रबंधित ऑब्जेक्ट क्लास से संदर्भ के लिए एक मजबूत संदर्भ जोड़ने के लिए संभावित रूप से खतरनाक होगा। जब वे "चाहिए" कई चीजों के कारण हो सकते हैं, तो दोष फायरिंग नहीं करते हैं, लेकिन अक्सर यह एक एक्सेसर विधि का गलत कार्यान्वयन होता है। – quellish

संबंधित मुद्दे