2010-07-26 11 views

उत्तर

3

आपके द्वारा वर्णित 4 विधियों में से आप आमतौर पर केवल release और autorelease उद्देश्य-सी में उपयोग करेंगे। free शायद आपने सी और malloc का उपयोग किया है, अन्यथा आपको release और autorelease का उपयोग करना चाहिए।

dealloc को आपके किसी भी कोड द्वारा नहीं बुलाया जाना चाहिए क्योंकि यह रखरखाव/रिलीज चक्र में हस्तक्षेप कर सकता है कि उद्देश्य-सी संसाधनों का ट्रैक रखने के लिए उपयोग करता है। यदि आप कभी इसका इस्तेमाल करते हैं तो dealloc का उपयोग लगभग निश्चित रूप से रनटाइम पर क्रैश हो जाएगा।

release और autorelease के उपयोग के अंतिम संसाधन Apple memory management documentation

3
  • freemalloc के विपरीत है और संभावना है कि आप उद्देश्य सी
  • में यह बहुत ज्यादा प्रोग्रामिंग का उपयोग नहीं करेंगे सी में इस्तेमाल किया जाता है
  • यदि आपके पास कोई ऑब्जेक्ट है, तो आप release जब आप इसके साथ कर रहे हैं
  • आप autorelease ऑब्जेक्ट भी कर सकते हैं। यह स्वचालित रूप से वर्तमान रन लूप पुनरावृत्ति के अंत में इसे जारी करता है
  • जब किसी ऑब्जेक्ट पर संदर्भ गणना शून्य पर गिर जाती है, तो रनटाइम dealloc पर कॉल करता है। आप इस पद्धति नहीं बुलाना चाहिए खुद

आप "अपने" एक वस्तु अगर आप alloc, new, retain या यह copy

ऐप्पल इस पर some good documentation प्रदान करता है।

+1

प्वाइंट 3: मैं इसे "रन-लूप" के बजाय "रन-लूप पुनरावृत्ति" कहूंगा। प्वाइंट 4: निश्चित रूप से, आप "रिलीज" के बजाय "dealloc" कहना चाहते थे, है ना? (क्षमा करें, नाइटपिकिंग) – Dirk

+0

बहुत बहुत धन्यवाद। वह निश्चित रूप से सहायक था। – ar106

+0

@Dirk अच्छी जगह। फिक्स्ड। –

17

free() एक सी फ़ंक्शन है जिसका उपयोग आप malloc() के माध्यम से प्राप्त की गई अब आवश्यक स्मृति का निपटान करने के लिए करते हैं या अन्य फ़ंक्शन जो कि इसकी स्मृति को डिलीकेट करने के लिए नि: शुल्क() की आवश्यकता होती है उदा। strdup()

-dealloc एक उद्देश्य-सी चयनकर्ता है जो ऑब्जेक्टिव-सी रनटाइम द्वारा किसी ऑब्जेक्ट पर भेजा जाता है जब ऑब्जेक्ट का अब किसी भी एप्लिकेशन के स्वामित्व में स्वामित्व नहीं होता है।

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

-autorelease एक चयनकर्ता है जिसे आप किसी ऑब्जेक्ट को भेजते हैं ताकि यह इंगित किया जा सके कि आप ऑब्जेक्ट के स्वामित्व को छोड़ रहे हैं। हालांकि अगर कोई भी ऑब्जेक्ट का मालिक नहीं है तो अंतिम -dealloc कुछ अनिर्दिष्ट बाद के बिंदु तक स्थगित कर दिया जाएगा। असल में, आप वास्तव में क्या कर रहे हैं अपने स्वामित्व को एक ऑटोरेलीज पूल में स्थानांतरित कर रहा है जो इसे रिलीज़ होने पर (या निकाला जाता है) तब रिलीज़ करेगा।

ऑब्जेक्ट के -dealloc विधि में आपको super को छोड़कर किसी ऑब्जेक्ट को -dealloc कभी भी नहीं भेजना चाहिए।

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