2011-06-22 4 views
5

मुझे अपने प्रोग्राम में आवंटित सभी मेमोरी कब जारी करनी चाहिए?dealloc और viewdidunload के बीच क्या अंतर है?

क्योंकि मेरे पास केवल एक दृश्य हैडलोड लोड विधि है जहां मैं अपना व्यवसाय करता हूं। क्या मुझे केवल डीडीयूएनलोड में डिलीक खाली और सफाई छोड़नी चाहिए?

उत्तर

8

'dealloc' का उपयोग तब किया जाता है जब वस्तु मुक्त होने के लिए तैयार होती है (यानी, जब वस्तु की गिनती बरकरार रखती है 0)। और viewDidUnload को तब कहा जाता है जब दृश्य अनलोड किया जाता है, लेकिन इसे तुरंत मुक्त नहीं किया जा सकता है क्योंकि UIViewController के संदर्भ को अभी भी कुछ अन्य ऑब्जेक्ट्स द्वारा संग्रहीत किया जाता है।

मेरी व्यक्तिगत वरीयता है, 'init' द्वारा बनाई गई ojbects के लिए, उन्हें 'viewDidLoad' द्वारा बनाई गई वस्तुओं के लिए 'dealloc' द्वारा मुक्त किया जाता है, वे 'viewDidUnload' से मुक्त होते हैं।

+2

इतना "वरीयता" नहीं, बल्कि एक आवश्यकता है। ध्यान रखें कि '-viewDidLoad' को कई बार बुलाया जा सकता है, हालांकि हमेशा के बीच' -viewDidUnload' कॉल 'होगा। हालांकि, '-viewDidLoad' में जो भी आप बनाते हैं उसे' -dealloc' में भी साफ़ किया जाना चाहिए, क्योंकि नियंत्रक को हटाए जाने से पहले '-viewDidUnload' नहीं कहा जा सकता है। –

4

-viewDidUnload के प्रलेखन के रूप में कहते हैं:

यह कम स्मृति के दौरान कहा जाता है की स्थिति जब दृश्य नियंत्रक अपने दृश्य और मुक्त स्मृति को उस दृश्य के साथ जुड़े किसी भी वस्तुओं को रिहा करने की जरूरत है। क्योंकि दृश्य नियंत्रकों अक्सर दृश्यों तथा अन्य दृश्य से संबंधित वस्तुओं, के लिए संदर्भ की दुकान आप उन वस्तुओं में त्यागना स्वामित्व के लिए इस विधि का उपयोग करती हैं इसलिए उनके लिए स्मृति पुन: दावा किया जा सकता है चाहिए। आपको केवल ऑब्जेक्ट्स के लिए यह करना चाहिए कि आप बाद में अपने दृश्य में आसानी से रीडियेट कर सकते हैं, या तो 0Dविधि या एप्लिकेशन के अन्य हिस्सों से। आपको उपयोगकर्ता डेटा या अन्य जानकारी जारी करने के लिए विधि का उपयोग नहीं करना चाहिए जो आसानी से पुनर्निर्मित नहीं हो सकता है।

आमतौर पर, एक दृश्य नियंत्रक भंडार संदर्भ वस्तुओं के लिए एक आउटलेट, जो एक चर या संपत्ति है कि IBOutlet कीवर्ड भी शामिल है और इंटरफ़ेस बिल्डर का उपयोग कर कॉन्फ़िगर किया गया है का उपयोग कर। व्यू कंट्रोलर पॉइंटर्स को ऑब्जेक्ट्स पर संग्रहीत कर सकता है जो प्रोग्रामेटिक रूप से बनाता है, जैसे viewDidLoad विधि में। किसी भी ऑब्जेक्ट (आउटलेट में शामिल समेत) के स्वामित्व को छोड़ने के लिए पर संबंधित एक्सेसर विधि का उपयोग करने के लिए ऑब्जेक्ट का मान शून्य पर सेट करना है। हालांकि, यदि आपके पास किसी दिए गए ऑब्जेक्ट के लिए एक्सेसर विधि नहीं है, तो आपको ऑब्जेक्ट स्पष्ट रूप से जारी करना पड़ सकता है।

कोई जिक्र नहीं -viewDidUnload-dealloc में फोन करेगा, आप उस पर निर्भर नहीं होना चाहिए नहीं है।

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

  • कोई संबंधित समस्या नहीं^_^