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