क्या कोई free()
, release
, autorelease
और dealloc
के बीच अंतरों को समझा सकता है?मुफ्त, dealloc, रिलीज, और autorelease के बीच मतभेद क्या हैं?
उत्तर
आपके द्वारा वर्णित 4 विधियों में से आप आमतौर पर केवल release
और autorelease
उद्देश्य-सी में उपयोग करेंगे। free
शायद आपने सी और malloc
का उपयोग किया है, अन्यथा आपको release
और autorelease
का उपयोग करना चाहिए।
dealloc
को आपके किसी भी कोड द्वारा नहीं बुलाया जाना चाहिए क्योंकि यह रखरखाव/रिलीज चक्र में हस्तक्षेप कर सकता है कि उद्देश्य-सी संसाधनों का ट्रैक रखने के लिए उपयोग करता है। यदि आप कभी इसका इस्तेमाल करते हैं तो dealloc
का उपयोग लगभग निश्चित रूप से रनटाइम पर क्रैश हो जाएगा।
release
और autorelease
के उपयोग के अंतिम संसाधन Apple memory management documentation
free
malloc
के विपरीत है और संभावना है कि आप उद्देश्य सी में यह बहुत ज्यादा प्रोग्रामिंग का उपयोग नहीं करेंगे सी में इस्तेमाल किया जाता है
- यदि आपके पास कोई ऑब्जेक्ट है, तो आप
release
जब आप इसके साथ कर रहे हैं - आप
autorelease
ऑब्जेक्ट भी कर सकते हैं। यह स्वचालित रूप से वर्तमान रन लूप पुनरावृत्ति के अंत में इसे जारी करता है - जब किसी ऑब्जेक्ट पर संदर्भ गणना शून्य पर गिर जाती है, तो रनटाइम
dealloc
पर कॉल करता है। आप इस पद्धति नहीं बुलाना चाहिए खुद
आप "अपने" एक वस्तु अगर आप alloc
, new
, retain
या यह copy
।
ऐप्पल इस पर some good documentation प्रदान करता है।
free()
एक सी फ़ंक्शन है जिसका उपयोग आप malloc()
के माध्यम से प्राप्त की गई अब आवश्यक स्मृति का निपटान करने के लिए करते हैं या अन्य फ़ंक्शन जो कि इसकी स्मृति को डिलीकेट करने के लिए नि: शुल्क() की आवश्यकता होती है उदा। strdup()
।
-dealloc
एक उद्देश्य-सी चयनकर्ता है जो ऑब्जेक्टिव-सी रनटाइम द्वारा किसी ऑब्जेक्ट पर भेजा जाता है जब ऑब्जेक्ट का अब किसी भी एप्लिकेशन के स्वामित्व में स्वामित्व नहीं होता है।
-release
वह चयनकर्ता है जिसे आप किसी ऑब्जेक्ट को भेजते हैं यह इंगित करने के लिए कि आप उस ऑब्जेक्ट के स्वामित्व को छोड़ रहे हैं। एक बार किसी ऑब्जेक्ट का स्वामित्व किसी के स्वामित्व में नहीं होता है, तो इसे रनटाइम द्वारा -dealloc
संदेश भेजा जाता है।
-autorelease
एक चयनकर्ता है जिसे आप किसी ऑब्जेक्ट को भेजते हैं ताकि यह इंगित किया जा सके कि आप ऑब्जेक्ट के स्वामित्व को छोड़ रहे हैं। हालांकि अगर कोई भी ऑब्जेक्ट का मालिक नहीं है तो अंतिम -dealloc
कुछ अनिर्दिष्ट बाद के बिंदु तक स्थगित कर दिया जाएगा। असल में, आप वास्तव में क्या कर रहे हैं अपने स्वामित्व को एक ऑटोरेलीज पूल में स्थानांतरित कर रहा है जो इसे रिलीज़ होने पर (या निकाला जाता है) तब रिलीज़ करेगा।
ऑब्जेक्ट के -dealloc
विधि में आपको super
को छोड़कर किसी ऑब्जेक्ट को -dealloc
कभी भी नहीं भेजना चाहिए।
- 1. Autorelease बनाम रिलीज
- 2. आईफोन एसडीके: Dealloc बनाम रिलीज?
- 3. dealloc
- 4. क्या dealloc
- 5. [स्वयं रिलीज], [स्वयं dealloc] या [सुपर dealloc] init तरीकों में?
- 6. [myVar dealloc] और [myVar रिलीज] के बीच सबसे अच्छा अंतर क्या बताता है?
- 7. ओएसजीआई और जावा ईई के बीच मौलिक मतभेद क्या हैं?
- 8. क्या() .ToString के बीच मतभेद और + ""
- 9. dealloc और viewdidunload के बीच क्या अंतर है?
- 10. रिलीज और ऑटोरेलीज़िंग के बीच क्या अंतर है?
- 11. सॉफ्टवेयर रिलीज के लिए सीटीपी, अल्फा, बीटा, गामा, आरटीएम और पूर्वावलोकन के बीच मतभेद?
- 12. इंडेक्सडेब: असफल और अपूर्ण के बीच मतभेद?
- 13. CSS3 के बीच मतभेद: होवर और: फोकस?
- 14. पैटर्न मिलान और एकीकरण के बीच मतभेद?
- 15. आरईएसटी और जेएसओएन एपीआई के बीच मतभेद
- 16. matlab और comsol स्क्रिप्ट के बीच मतभेद?
- 17. स्मॉलटॉक और पायथन के बीच मतभेद?
- 18. कुकीज़ और सत्र के बीच मतभेद?
- 19. एग्डा और इडिस के बीच मतभेद
- 20. एनवीएल और कोलेसेस के बीच ओरेकल मतभेद
- 21. NoClassDefFoundError और ClassNotFoundException के बीच मतभेद?
- 22. ServletResponse और HttpServletResponseWrapper के बीच मतभेद?
- 23. एमएसआईएल और जावा बाइटकोड के बीच मतभेद?
- 24. लॉग और लॉगर के बीच मतभेद?
- 25. रेखा और शाखा कवरेज के बीच मतभेद
- 26. टेक्स्टमल्टीलाइन और टेक्स्ट के बीच मतभेद
- 27. चींटी और मेवेन के बीच मतभेद
- 28. बाइनरी रिलीज और स्रोत रिलीज के बीच अंतर?
- 29. Coroutines और `goto` के बीच मतभेद?
- 30. नए + के बीच रेल में मतभेद और
प्वाइंट 3: मैं इसे "रन-लूप" के बजाय "रन-लूप पुनरावृत्ति" कहूंगा। प्वाइंट 4: निश्चित रूप से, आप "रिलीज" के बजाय "dealloc" कहना चाहते थे, है ना? (क्षमा करें, नाइटपिकिंग) – Dirk
बहुत बहुत धन्यवाद। वह निश्चित रूप से सहायक था। – ar106
@Dirk अच्छी जगह। फिक्स्ड। –