9

आईओएस 4.0 और उसके बाद से केवल एआरसी का समर्थन करने का तकनीकी कारण क्या है?एआरसी केवल आईओएस 4.0+ के लिए क्यों काम करता है?

यह मेरी समझ है कि यह एक कंपाइलर सुविधा है, जो डेवलपर को ऐसा करने की आवश्यकता के बजाय स्वचालित रूप से स्मृति प्रबंधन संबंधित कोड डालती है। जो मैंने पढ़ा है उससे कॉल स्वयं ही वही रहता है - कम से कम यही है कि सेब Transitioning to ARC Guide का तात्पर्य है।

इस प्रकार, इसमें ऐसी विशेषताएं शामिल नहीं होनी चाहिए जो आईओएस के पिछले संस्करणों में मौजूद नहीं हैं, और वास्तव में एआरसी बाद में पेश किए जाने के बावजूद आईओएस 4.0 के साथ काम करता है।

मैं इस सवाल को जिज्ञासा से बाहर कर रहा हूं और वास्तव में आईओएस 3.x के साथ एआरसी काम करने की आवश्यकता नहीं है।

उत्तर

16

यह इसी कारण से है कि स्वत: संदर्भ गणना केवल न्यूनतम-तैनाती लक्ष्य के रूप में 64-बिट हिम तेंदुए का समर्थन करती है: एआरसी समर्थन के लिए आधुनिक रनटाइम के एक नए पर्याप्त संस्करण में केवल कुछ विशेषताओं की आवश्यकता होती है। उस आधुनिक रनटाइम को आईओएस 4.0 के साथ पेश किया गया था, इसलिए पुराने आईओएस संस्करणों में एआरसी द्वारा तकनीकी रूप से आवश्यक कुछ चीजों को संभालने में सक्षम रनटाइम की कमी है। यदि यह सिर्फ ओएस संस्करणों के लिए महत्वपूर्ण था, तो 32-बिट हिम तेंदुए के अनुप्रयोगों का भी समर्थन किया जाएगा, लेकिन केवल 64-बिट रनटाइम आधुनिक है।

यदि आप WWDC 2011 से ऐप्पल की प्रस्तुतियों को देखते हैं, विशेष रूप से "उद्देश्य-सी एडवांसमेंट इन-गहराई", तो आप देखेंगे कि बनाए रखने/रिलीज प्रक्रिया को तेज करने के लिए कई अंडर-द-हूड सुधार किए गए हैं, साथ ही साथ @autoreleasepool जैसी चीजें। LLVM ARC specification में रनटाइम समर्थन पर एक संपूर्ण अनुभाग है। इन सुधारों को केवल कंपाइलर समर्थन से अधिक की आवश्यकता है।

हमें पहले से ही उदाहरण के चर के स्वचालित संश्लेषण जैसी सुविधाओं के लिए आधुनिक रनटाइम का उपयोग करना पड़ा (जैसा कि Apple's documentation में बताया गया है), इसलिए यह एक भयानक आश्चर्य नहीं है।

लक्ष्य के रूप में आईओएस 4.0 भी कमजोर संदर्भों के लिए समर्थन की कमी है, इसलिए यहां खेलने के लिए स्पष्ट तकनीकी मुद्दे हैं। डेवलपर्स को नए संस्करणों में चलाने के लिए यह सिर्फ मार्केटिंग रणनीति नहीं है, जैसा कि दूसरों द्वारा लगाया गया है।

+1

यह असंभव है कि एआरसी को x86-64 की कुछ विशेषता की आवश्यकता है जो i386 पर अनुपलब्ध है जो इसके कार्यान्वयन को रोकता है। "तकनीकी", "विपणन", "संसाधन", "प्रबंधन", "व्यावहारिक" आदि सभी व्यक्तिपरक शर्तें हैं। जब तक ऐप्पल से कोई भी ओपी के प्रश्न के सभी उत्तरों में चिपकने का विकल्प नहीं चुनता है, तो सबसे अच्छा अनुमान है। असल में ऐप्पल में अलग-अलग लोग, उनकी भूमिका के आधार पर, शायद अलग-अलग कारण हैं! इसके बारे में कोई "स्पष्ट" नहीं है - अन्य उत्तरों में "शायद" और "अनुमान" के उपयोग पर ध्यान दें। – CRD

+4

@CRD - शायद आपको उपरोक्त ऐप्पल प्रलेखन को पढ़ना चाहिए जहां यह कहता है: "मैक ओएस एक्स v10.5 पर आईफोन अनुप्रयोग और 64-बिट प्रोग्राम और बाद में रनटाइम के आधुनिक संस्करण का उपयोग करें। अन्य प्रोग्राम (मैक पर 32-बिट प्रोग्राम ओएस एक्स डेस्कटॉप) रनटाइम के विरासत संस्करण का उपयोग करें। " यह x86-64 बनाम i386 के बारे में नहीं है, यह रनटाइम क्षमताओं के बारे में है। जैसा कि मैंने उल्लेख किया है, प्रत्येक ओएस के साथ भेजे गए रनटाइम संस्करणों के बीच तकनीकी अंतर हैं, और एआरसी का समर्थन करने के लिए रनटाइम का एक नया पर्याप्त संस्करण आवश्यक है। पुराने ओएस संस्करणों के लिए नए रनटाइम का बैकपोर्ट करना संभव नहीं है। एआरसी को छोड़कर –

+0

10.5 पर नहीं चलता है ... जो आधुनिक रनटाइम का उपयोग करता है ... और आधुनिक रनटाइम i386 पर क्यों नहीं चल रहा है ... आदि हम आगे ट्यूरिंग पूर्णता बहस खत्म कर देंगे :-) – CRD

1

मेरा अनुमान है कि क्लैंग टूल चेन (एआरसी के लिए आवश्यक) आईओएस 3.x के साथ संगत द्विआधारी निर्माण नहीं करता है।

इसके अलावा, वहाँ -retain और -release भेजने के स्थान पर इस्तेमाल सी कार्यों की एक जोड़ी है कि आईओएस 3.x में उपलब्ध नहीं हो सकता

http://www.informit.com/articles/article.aspx?p=1745876

2

एक ही प्रश्न की तरह होंगे:

NSRegularExpression केवल आईओएस 4.0+ और मैक ओएस एक्स 10.7 (शेर) + द्वारा समर्थित क्यों है?

आप पूरी तरह से मैक ओएस एक्स 10.6.7 (Snow Leopard) जहां आप आसानी से उपयोग कर सकते हैं NSRegularExpression में आईओएस 5.0 (और 4.0 जाहिर है) के सिमुलेटर काम कर रहा है, लेकिन यह Mac OS X 10.6.7 अपने आप में समर्थित नहीं है।

और आपके प्रश्न के विषय में: एआरसी आईओएस 5.0 के साथ पेश किया गया था। उस समय कई आईओएस 3.x उपयोगकर्ता नहीं थे, इसलिए मेरी राय यह है कि ऐप्पल आईओएस 3.x के साथ एआरसी को संगत बनाने के लिए थोड़ा आलसी था।

4

docs of Apple बताता है कि सुपर को डेलोक चेनिंग एआरसी के मामले में रनटाइम में संभाला जाता है।

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