2010-04-11 13 views
5

मैं आईफोन के लिए एक ऐप लिखने की सोच रहा हूं। लेकिन मैं उद्देश्य-सी भाषा के संबंध में उलझन में हूं। क्या मैं यह कहकर सही हूं कि मुझे अपना खुद का मेमोरी प्रबंधन करना है? उद्देश्य-सी एक प्रबंधित भाषा जैसे सी # और/या जावा है?क्या उद्देश्य-सी में आईफोन पर कचरा कलेक्टर है?

धन्यवाद!

उत्तर

11

"प्रबंधित" एक विपणन शब्द है जिसका कोई तकनीकी अर्थ नहीं है। आईफोन के लिए उद्देश्य सी कचरा नहीं है, लेकिन गिनती स्मृति प्रबंधन बनाए रखने का उपयोग करता है। तो कुछ अर्थ में, आपको अपना खुद का मेमोरी प्रबंधन करना है, लेकिन यह Cocoa retain counting methodology जानने के लिए सीमित है।

संपादित करें: "प्रबंधित" पर मेरी टिप्पणियां previous post version का संदर्भ देती हैं। टिप्पणी यहां छोड़ी गई है क्योंकि मैं शब्द देखने से थक गया हूं।

0

उत्तर उद्देश्य-सी के लिए विशिष्ट नहीं है। यदि आप आईफोन विकास कर रहे हैं, नहीं ... कोई कचरा कलेक्टर नहीं है। यदि आप मैक ओएसएक्स के लिए विकास कर रहे हैं, हालांकि, कचरा संग्रह है।

1

जैसा कि अन्य ने बताया है कि उद्देश्य-सी में आईफोन पर कोई कचरा कलेक्टर नहीं है, लेकिन इसमें मैक ओएसएक्स के लिए एक है। यहां एक विवरण है जो इसे अधिक विस्तार से वर्णित करता है: http://vasudevkamath.blogspot.com/2010/01/objective-c-my-opinions.html

3

कोई कचरा संग्रह सुविधा नहीं है। हालांकि, copy, retain, alloc इत्यादि के किसी भी ऑब्जेक्ट में इसकी एक बरकरार गिनती है, और आप release या autorelease पर कॉल करने के लिए ज़िम्मेदार हैं - आपके पास उस ऑब्जेक्ट का एक उदाहरण है। यदि आप [<YOUROBJECT> release]; या [<YOUROBJECT> autorelease]; पर कॉल नहीं करते हैं, तो ऑब्जेक्ट आईफोन/आईपॉड टच/आईपैड की मेमोरी में रहता है, लेकिन पॉइंटर अब नहीं रहता है, और मेमोरी लीक होता है, क्योंकि उस बिट मेमोरी को अब एक्सेस नहीं किया जा सकता है। Autoreleasing ऑब्जेक्ट को ऑटोरेलीज पूल में जोड़ता है, और इसका मतलब है कि यह भविष्य में किसी बिंदु पर रिलीज़ हो जाएगा। जहां भी संभव हो, मानक release का उपयोग करें, autorelease का अर्थ है कि यह अभी भी थोड़ी देर के लिए डिवाइस की स्मृति में रहेगा, आप कभी भी यह सुनिश्चित नहीं कर सकते कि इसे कब जारी किया जाएगा, और यह कॉल करने के लिए एक और अधिक मांग विधि है।

कभी भी ऑब्जेक्ट पर dealloc पर कॉल न करें - रिलीज या ऑटोरेलीज़िंग पर्याप्त है, और यदि आवश्यक हो, तो ऑब्जेक्ट स्वचालित रूप से समाप्त हो जाएगा।

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

आप और here पढ़ सकते हैं।

आशा है कि इससे

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