iOS 5 बेस्ट प्रैक्टिस (रिलीज / रिटेन?)


109

एक शुरुआती iPhone प्रोग्रामर के रूप में, आईओएस 5 या पुराने संस्करणों के साथ उपयोग किए जाने वाले एप्लिकेशन लिखने के लिए सबसे अच्छा अभ्यास क्या है? विशेष रूप से, क्या मुझे डेटा के रिलीज़ / बनाए रखने का उपयोग जारी रखना चाहिए, या क्या मुझे इसे अनदेखा करना चाहिए? फर्क पड़ता है क्या?


1
ARC का उपयोग करें, और यहां बताए अनुसार सर्वोत्तम प्रथाओं का पालन करें: amattn.com/2011/12/07/arc_best_practices.html यदि आप ऐसा करते हैं, तो आप पाएंगे कि ARC "बस काम करता है"। यदि आप उन प्रथाओं का पालन नहीं करते हैं, तो आप लीक के साथ समाप्त हो जाएंगे और उन्हें नीचे ट्रैक करने में बहुत समय
बिताएंगे

जवाबों:


98

यह आप पर निर्भर करता है। आप ARC (ऑटोमैटिक रेफरेंस काउंटिंग) का उपयोग करके ऐप्स लिख सकते हैं, और Xcode आपके ARC सक्षम ऐप्स को iOS 4 पर चलने की अनुमति देने के लिए "गोंद कोड" लिखेगा, इसमें कोई संशोधन की आवश्यकता नहीं है। हालाँकि, कुछ चीजें काम नहीं करती हैं, और सबसे अधिक ध्यान देने योग्य कई पुस्तकालय जो आप (कभी-कभी) उपयोग करना चाहते हैं, असंख्य त्रुटियां फेंक देंगे और जब तक कि डेवलपर्स अपडेट को ARC के साथ संगत नहीं करते तब तक आप उनका उपयोग नहीं कर पाएंगे।


संपादित करें : मुझे हाल ही में पता चला है कि आप प्रति फ़ाइल के आधार पर एआरसी को बंद कर सकते हैं। देखिए पिक्सफ्रीक का जवाब । इसलिए, मेरी सलाह अभी भी कायम है, लेकिन अब तृतीय-पक्ष पुस्तकालयों को एआरसी के साथ काम करने के लिए अद्यतन करने की आवश्यकता नहीं होनी चाहिए।

यहाँ Apple विशिष्ट फ़ाइलों के लिए ARC से बाहर निकलने के बारे में क्या कहता है:

जब आप ARC का उपयोग करने के लिए किसी प्रोजेक्ट को माइग्रेट करते हैं, -fobjc-arc कंपाइलर फ़्लैग को सभी Objective-C स्रोत फ़ाइलों के लिए डिफ़ॉल्ट के रूप में सेट किया जाता है। आप उस वर्ग के लिए -fno-objc-arc संकलक ध्वज का उपयोग करके किसी विशेष वर्ग के लिए ARC को अक्षम कर सकते हैं। Xcode में, लक्ष्य बनाएँ चरण टैब में, स्रोत फ़ाइल सूची प्रकट करने के लिए संकलन स्रोत समूह खोलें। उस फ़ाइल को डबल-क्लिक करें जिसके लिए आप ध्वज सेट करना चाहते हैं, पॉप-अप पैनल में -fno-objc-arc दर्ज करें, फिर Done पर क्लिक करें।

यहां छवि विवरण दर्ज करें

पूर्ण संक्रमण गाइड यहाँ देखें ।


15
एआरसी जाहिर तौर पर "प्रति फ़ाइल" आधार पर बंद किया जा सकता है, शायद विरासत पुस्तकालयों के उपयोग की अनुमति है ... लेकिन मैंने इसके साथ नहीं खेला है इसलिए मुझे अभी तक पता नहीं है। मैं हालांकि इसके बारे में बहुत उत्साहित हूं। क्या आप एक ऐसी दुनिया की कल्पना कर सकते हैं, जहाँ iOS के देवों को पसीना बहाने / रिलीज करने की जरूरत नहीं है हम यहाँ एसओ पर क्या बात करेंगे ?? ;-)
डैन रे

45
बस जब मुझे आखिरकार उस स्मृति प्रबंधन बकवास पर एक अच्छा हैंडल मिला, और फिर वे इसे अप्रासंगिक बना देते हैं। नौकरियां!!!
कोंग्रेस

@ दान: आप मजाक नहीं कर रहे हैं यह चुनिंदा रूप से बंद हो सकता है? कृपया एक लिंक दें, जो मेरे लिए महत्वपूर्ण है! : D
सुडो rm -rf

1
मेरा मानना ​​है कि कंपाइलर अब एनडीए के अधीन नहीं है, इसलिए अपने कोड से चुनिंदा फाइलों (आमतौर पर थर्ड पार्टी सोर्स फोल्डर) को बाहर कर दें, बस इसे कंपाइलर ऑप्शन के रूप में प्रत्येक फाइल में जोड़ें: -fno-objc-arc
blackjack75

2
@ यार: हां तुम हो। काश यह इतना सरल होता, लेकिन दुर्भाग्य से सभी पुस्तकालय इतने सरल नहीं होते। JSONKitउदाहरण के लिए लीजिए । एआरसी चेक के माध्यम से चलाने की कोशिश करें। आप देखेंगे कि मेरा क्या मतलब है। ;)
सुडो rm -rf

170

व्यक्तिगत फ़ाइलों पर ARC को बंद करने के तरीके के बारे में अभी भी उत्सुक लोगों के लिए, यहाँ मैंने क्या किया है:

  1. के तहत अपनी परियोजना सेटिंग्स पर जाएं Build Phases > Compile Sources
  2. उन फ़ाइलों का चयन करें जिन्हें आप ARC अक्षम और ऐड -ओनो-ओब्जेक्ट-आर्क कंपाइलर फ़्लैग चाहते हैं। आप फ़ाइलों को चुनकर "शॉट" कुंजी दबाकर एक शॉट में कई फ़ाइलों के लिए झंडे सेट कर सकते हैं।

मुझे नहीं पता कि यह अनुशंसित तरीका है, लेकिन यह मेरे लिए काम करता है।

पुनश्च: मैंने यह जानकारी clang.llvm.org से एकत्रित की है जो सार्वजनिक रूप से सुलभ है, इस प्रकार NDA के अंतर्गत नहीं है।


1
जब मैं इस ध्वज का उपयोग किसी पुस्तकालय के साथ करता हूं तो यह काम करता है, लेकिन जैसे ही मैंने lib .h फ़ाइल को ARC वर्ग में शामिल किया, Xcode शिकायत करता है जैसे कि मेरे पास वहां ध्वज नहीं था। क्या आप इस ध्वज के साथ काम करने के लिए पुराने पुस्तकालय प्राप्त करने में सक्षम थे?
केसी

मैं ASIHttpRequest और SBJson को काम पर लाने में सक्षम हूं (मुझे Reachability.h में संरचनात्मक उपयोग पर 1 चेतावनी मिलती है)। मैंने उनके सभी कार्यान्वयन फाइलों में झंडा लगा दिया।
pixelfreak

सभी कार्यान्वयन फ़ाइलें या सिर्फ। प्रोजेक्ट के मेरे संकलित स्रोत अनुभाग में केवल हेडर फ़ाइलें हैं, कोई कार्यान्वयन फ़ाइलें नहीं हैं। मैं उन्हें जोड़ सकते हैं, लेकिन यह नहीं करता है लगता है एक अलग प्रभाव है। आपके संदर्भ के लिए, मैं काम करने के लिए REST पार्सर प्राप्त करने की कोशिश कर रहा हूं। ( Github.com/mirek/NSMutableDictionary-REST.framework )
केसी

1
अहा! मैंने त्रुटियों पर पर्याप्त रूप से गौर नहीं किया। वे ध्वज के बिना अलग-अलग त्रुटियां हैं। मुझे बस कोड और व्ह-ला से ऑटो रिलीज़ पूल को हटाना था!
केसी

जब मैं कई फाइलों का चयन करता हूं और हिट दर्ज करता हूं, जैसा कि यहां सुझाया गया था, वे सभी बिल्ड चरणों में 'संकलन स्रोतों' से हटा दिए गए थे। मुझे उन्हें व्यक्तिगत रूप से चुनना था। यकीन नहीं होता कि मैं कुछ गलत कर रहा हूं।
गोपालकृष्णन सुब्रमण्यन

10

iOS 5 अभी भी एक NDA के तहत है, और शायद तब तक रहेगा जब तक वे सार्वजनिक संस्करण जारी नहीं करते। यदि आपके पास एक डेवलपर खाता है, तो Apple डेवलपर फ़ोरम पर जाएं और वहां पूछें।

पिछले संस्करणों के लिए, आपको संदर्भों को गिनना होगा और तदनुसार बनाए रखना और जारी करना होगा। की जाँच करें मेमोरी मैनेजमेंट गाइड

संपादित करें: यहां स्वचालित संदर्भ गणना के लिए एक सार्वजनिक युक्ति और सार्वजनिक iOS 5 पृष्ठ का एक उद्धरण है :

ऑब्जेक्टिव-सी के लिए ऑटोमैटिक रेफरेंस काउंटिंग (ARC) मेमोरी मैनेजमेंट को कंपाइलर का काम देता है। नए Apple LLVM संकलक के साथ ARC को सक्षम करने से, आपको क्रैश और मेमोरी लीक को कम करते हुए, विकास की प्रक्रिया को नाटकीय रूप से सरल बनाने, फिर से बनाए रखने या जारी करने की आवश्यकता नहीं होगी। संकलक को आपकी वस्तुओं के बारे में पूरी समझ है, और प्रत्येक वस्तु को तत्काल उपयोग में लाता है, जिसका अब उपयोग नहीं किया जाता है, इसलिए ऐप्स पहले से कहीं अधिक तेज़ी से चल रहे हैं, पूर्वानुमानित, सुस्पष्ट प्रदर्शन।


क्या पुराने आईफ़ोन के साथ आईओएस 5 काम का उपयोग करके एप्लिकेशन विकसित किए जाएंगे?
जीकिरेल

आप पुराने OS के लिए विकसित करने के लिए टूल का उपयोग कर पाएंगे, लेकिन आप ARC जैसी नई तकनीकों का उपयोग नहीं कर पाएंगे। यदि आप पुराने OS को लक्षित करना चाहते हैं, तो आपको मैन्युअल मेमोरी प्रबंधन करना होगा। यदि आप ARC का उपयोग करना चाहते हैं, तो आपको उपयोगकर्ताओं को iOS 5.
nevan राजा

1
एआरसी का संदर्भ एक सार्वजनिक रूप से Apple पेज डेवलपर. apple.com/technologies/ios5 पर है, इसलिए कम से कम कुछ हिस्से एनडीए के अधीन नहीं हैं।
कोबाल

8
वास्तव में यह बिल्कुल सच नहीं है। आप ARC के साथ iOS 4 के लिए निर्माण कर सकते हैं। Apple इंजीनियर का उद्धरण: " iOS 4 और मैक ओएस 10.6 के लिए, कंपाइलर आपके ऐप में थोड़ा सा रनटाइम कम्पैटिबिलिटी ग्लू कोड जोड़ता है। यह __weak वैरिएबल्स को छोड़कर हर चीज के लिए काम करता है, जिसके लिए कम्पैटिबिलिटी कोड की तुलना में अधिक सपोर्ट की आवश्यकता होती है। iOS पर ARC। 4 गैर-एआरसी कोड की तुलना में सरल है, लेकिन यह आईओएस 5 पर एआरसी की तरह सरल नहीं है। "वैसे, WWDC शेड्यूल ऐप को ARC के साथ लिखा गया था और यह iOS 4 पर ठीक काम करता है!
सुडो rm -rf

3
हां; हालांकि, जो ARC की बातचीत में योग्य था, केवल 4.3.x लक्ष्यों को 'संगतता गोंद' मिलता है।
एलन ज़ीनो

4

वर्तमान में विवरण NDA के तहत हल्के / कम हैं, लेकिन Apple ने iOS 5 में ऑटोमैटिक रेफरेंस काउंटिंग (ARC) को लागू किया है, जैसा कि यहाँ विस्तृत रूप से दिया गया है: http://developer.apple.com/technologies/ios5/

यदि आप iOS 5 SDK के साथ Xcode 4 में एक नया ऐप विकसित करते हैं, तो आप सुरक्षित रूप से रिटेन / रिलीज़ काउंटिंग को अनदेखा कर सकते हैं।

[संपादित करें] sudo rm -rf एक अच्छी बात बनाता है; तीसरे पक्ष के काम काफी प्रभावित हो सकते हैं


क्या पुराने आईफ़ोन के साथ आईओएस 5 काम का उपयोग करके एप्लिकेशन विकसित किए जाएंगे?
गीगाबर्ल

यह iOS 5 पर चलने वाले iPhones पर काम करेगा, इसलिए केवल iPhone 3GS या iPhone 4। मुझे विश्वास नहीं है कि यह iOS 4 को सपोर्ट करेगा, लेकिन फिर इसे संकलन करते समय LLVM द्वारा किया जाता है, इसलिए हो सकता है कि यह बाइनरी के लिए उत्पादन करे। iOS 4 और 5. मैं अत्यधिक iOS डेवलपर खाता प्राप्त करने और उपलब्ध विकल्पों के साथ खेलने की सलाह देता हूं।
डोमिनिक

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

3

किसी ने उल्लेख नहीं किया SystemConfiguration.framework ? कृपया इसे फ्रेमवर्क में रखना न भूलें । मैंने इसे महसूस करने के लिए कई घंटे बिताए।


आपको समझाना चाहिए कि क्यों।
जॉन रिसेल्वेटो

3

यह निश्चित रूप से डेवलपर या टीम की पसंद है। एआरसी (स्वचालित संदर्भ काउंटर) ने आपके लिए मेमोरी को स्वचालित रूप से प्रबंधित करके चीजों को थोड़ा आसान बना दिया है। यह उपयुक्त होने पर जारी, बनाए रखेगा और निपटाएगा। मेरा मानना ​​है कि यदि आप पहले से ही नहीं है, तो आपको परीक्षण एप्लिकेशन में मेमोरी का प्रबंधन करने का अनुभव प्राप्त करना चाहिए। एक और बात पर विचार करना है कि क्या आपका आवेदन तीसरे पक्ष के पुस्तकालयों पर निर्भर करता है, जो अगर एआरसी में परिवर्तित नहीं होता है, तो आपके आवेदन को संकलन करने से रोक देगा। चुनाव स्पष्ट रूप से हाथ की स्थिति पर निर्भर है।


0

झंडे को प्रोजेक्ट सेटिंग में -fno-objc-arc सेट करें> चरण बनाएँ> संकलित स्रोत

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.