आईओएस प्रोजेक्ट में नई स्वचालित संदर्भ गिनती (एआरसी) मेमोरी प्रबंधन शैली का उपयोग करने के फायदे और नुकसान क्या हैं?
एक एआरसी कार्यक्रम का निष्पादन लगभग अच्छी तरह से लिखित एमआरसी के समान है। यही है, व्यवहार मतभेद अक्सर ज्ञानी नहीं होते हैं क्योंकि संचालन और प्रदर्शन दोनों क्रम बहुत करीब हैं।
यदि आप पहले से ही जानते हैं कि मैन्युअल संदर्भ गिनती (एमआरसी) के साथ ओएस एक्स या आईओएस ऐप्स को कैसे कार्यान्वित किया जाए, तो एआरसी वास्तव में कार्यक्षमता नहीं जोड़ता है - यह आपको अपने स्रोतों से संदर्भ गिनती संचालन को हटाने की अनुमति देता है।
यदि आप एमआरसी सीखना नहीं चाहते हैं, तो आप पहले एआरसी आज़मा सकते हैं। बहुत से लोग संघर्ष करते हैं, या एमआरसी के सामान्य प्रथाओं को अनदेखा करने का प्रयास करते हैं (उदाहरण: मैंने स्थिर विश्लेषक को कई ओबीजेसी देवताओं को पेश किया है)। यदि आप उन मुद्दों से बचना चाहते हैं, तो एआरसी आपको अपनी समझ स्थगित करने की अनुमति देगा; आप एमआरसी, एआरसी, या जीसी चाहे संदर्भ संदर्भ और वस्तु जीवनकाल और रिश्तों को समझने के बिना नॉनट्रिविअल ओबीजेसी कार्यक्रम नहीं लिख सकते हैं। एआरसी और जीसी बस अपने स्रोतों से कार्यान्वयन को हटा दें और अधिकांश मामलों में सही स्थिति करें। एआरसी और जीसी के साथ, आपको अभी भी कुछ मार्गदर्शन देने की आवश्यकता होगी।
मैंने इसे माप नहीं लिया है, लेकिन यह उल्लेखनीय हो सकता है कि संकलित एआरसी स्रोतों में अधिक समय और संसाधन लगेगा।
कार्यक्रम आप विकसित कर रहे हैं संदर्भ गिनती के बजाय ढीला उपयोग (जैसे autoreleases का एक विशिष्ट राशि) है, तो चाप को वास्तव में अपने कार्यक्रम के निष्पादन समय और चोटी स्मृति के उपयोग को बेहतर बना सकते स्विचन।
क्या आप आईओएस 5.0 एसडीके के साथ विकास करते समय एआरसी का उपयोग नहीं करना चुन सकते हैं?
हाँ, CLANG_ENABLE_OBJC_ARC का उपयोग करके। एआरसी द्विआधारी संगत है, और जो वास्तव में होता है वह यह है कि वर्तमान अनुवाद (see my answer here as to why translation visibility is important) के लिए दिखाई देने वाली घोषणाओं के आधार पर संकलक स्वचालित रूप से आपके लिए उपयुक्त संदर्भ गणना संचालन शुरू करने का सर्वोत्तम प्रयास करता है। इसलिए, आप इसे किसी प्रोजेक्ट में कुछ स्रोतों के लिए सक्षम और अक्षम भी कर सकते हैं और इसे दूसरों के लिए सक्षम कर सकते हैं।
मिश्रित मोड (कुछ एमआरसी और कुछ एआरसी स्रोत) हालांकि काफी जटिल हैं, और संक्षेप में, विशेष रूप से wrt कार्यान्वयन जिन्हें संकलक द्वारा डुप्लिकेट किया जा सकता है (उदाहरण के लिए एक इनलाइन फ़ंक्शन का शरीर गलत हो सकता है)। इस तरह के मिश्रित मोड मुद्दों को अलग करना बहुत कठिन होगा। ObjC++ प्रोग्राम और स्रोत विशेष रूप से इस संबंध में कठिन होंगे। इसके अलावा, व्यवहार आपकी अनुकूलन सेटिंग्स (एक उदाहरण के रूप में) के आधार पर भिन्न हो सकता है; एक प्रोग्राम जो डीबग बिल्ड में पूरी तरह से काम करता है, रिलीज में रिसाव या ज़ोंबी पेश कर सकता है।
क्या आप एक नई परियोजना के लिए एआरसी या मैन्युअल संदर्भ गिनती (एमआरसी) की सलाह देते हैं?
व्यक्तिगत रूप से, मैं कुछ समय के लिए एमआरसी के साथ चिपके रहूंगा। यहां तक कि यदि असली दुनिया के उपयोग में एआरसी का परीक्षण किया गया है, तो संभवतः जटिल परिदृश्यों में दिखाई देने वाले कई मुद्दे शेष हैं, जिन्हें आप जानना और डीबग करने वाले पहले व्यक्ति से बचना चाहते हैं। ओएस एक्स का कचरा संग्रह एक उदाहरण है कि आप क्यों इंतजार करना चाहेंगे। एक उदाहरण के रूप में, ऑब्जेक्ट नष्ट होने पर स्विच बदल सकता है - आपकी ऑब्जेक्ट्स जल्द ही नष्ट हो सकती हैं और कभी भी ऑटोरेलीज पूल में नहीं रखी जा सकती हैं। यह उस क्रम को भी बदल सकता है जिसमें इवर जारी किए जाते हैं, जिसके कुछ दुष्प्रभाव हो सकते हैं।
मेरे पास एक बड़ा कोडबेस भी है जो मैं इस समय इस सुविधा का परीक्षण करने के लिए एक सप्ताह खोना नहीं चाहता हूं। अंत में, मेरे लिए पिछड़ा संगतता अभी भी महत्वपूर्ण है।
क्या एआरसी का उपयोग करने वाला कोई एप्लिकेशन आईओएस 5.0 की तुलना में पुराने ओएस संस्करणों पर चलाने में सक्षम होगा?
यदि आप एमआरसी के साथ विकसित होते हैं, तो यह पीछे की ओर संगत होगा। यदि आप एआरसी के साथ विकसित होते हैं, तो यह आवश्यक नहीं होगा। वास्तव में, यह थोड़ा अतिरिक्त काम के बिना भी संकलित नहीं हो सकता है। रनटाइम के लिए आवश्यकताएं कुछ पुराने संस्करणों में उपलब्ध हैं। See also this question। यदि आपको पिछली संगतता की आवश्यकता है, तो एआरसी कुछ ओएस संस्करणों के लिए एक विकल्प नहीं होगा।
आखिरकार, यदि आप जीसी या एआरसी को पसंद सीमित करना चाहते हैं, तो मैं एआरसी की सिफारिश करता हूं।
आपके यहां कई प्रश्न हैं, जिनमें से दो प्रश्नों में संबोधित हैं [नया स्वचालित संदर्भ गिनती तंत्र कैसे काम करता है?] (Http://stackoverflow.com/questions/6385212/how-does-the-new- स्वचालित-संदर्भ-गिनती-तंत्र-कार्य) और [एआरसी के साथ एक्सकोड 4.2: क्या मेरा कोड 5.0 से पुराने फर्मवेयर के साथ आईओएस डिवाइस पर भी चलाएगा?] (http://stackoverflow.com/questions/7768861/xcode-4-2 -साथ-arc-will-my-code-run-even-on-ios-devices-with-firmware-old-tha) –