2009-04-07 14 views
7

मुझे लगता है कि मुझे अंतर पता है, लेकिन यह नहीं पता कि इसे सही तरीके से कैसे समझाया जाए।[myVar dealloc] और [myVar रिलीज] के बीच सबसे अच्छा अंतर क्या बताता है?

dealloc उस चर द्वारा पूरी तरह से और तुरंत आरक्षित स्मृति को हटा देता है।

रिलीज में उस चर की स्मृति के बनाए गए काउंटर को -1 से कम किया गया है। अगर यह 1 था, तो यह 0 है, इसलिए उस पल में डेलोक के समान प्रभाव होगा।

क्या यह सही है? या क्या एक बेहतर लघु स्पष्टीकरण है?

उत्तर

13

यह बिल्कुल सही है।

लेकिन ऑब्जेक्ट का उपयोग करते समय आप dealloc का उपयोग नहीं करेंगे, क्योंकि आप नहीं जानते कि बनाए रखने की गणना क्या है। न ही आपको परवाह है। आप बस कहते हैं कि release पर कॉल करके आपको इसकी आवश्यकता नहीं है। और एक बार कोई नहीं करता है, ऑब्जेक्ट dealloc पर कॉल करेगा।

7

सभी सही, लेकिन एक महत्वपूर्ण बिंदु जो आप खो रहे हैं वह यह है कि आपको कभी भी खुद को डेलोक नहीं करना चाहिए। यहाँ NSObject dealloc विधि पर एप्पल के दस्तावेज़ से कुछ जानकारी है:

(http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/dealloc से)

तुम कभी एक dealloc संदेश सीधे भेज सकते हैं। इसके बजाए, ऑब्जेक्ट की डेलोक विधि अप्रत्यक्ष रूप से के माध्यम से अप्रत्यक्ष रूप से जारी की जाती है, जिसे एनएसओब्जेक्ट प्रोटोकॉल विधि रिलीज़ किया जाता है (यदि रिलीज संदेश रिसीवर की धारणा गिनती 0 हो रहा है)। मेमोरी मैनेजमेंट प्रोग्रामिंग पर इन विवरणों के उपयोग के बारे में अधिक जानकारी के लिए कोको के लिए मार्गदर्शिका देखें।

उपवर्गों किसी भी अतिरिक्त स्मृति डेटा के लिए वस्तु ऐसी के रूप में गतिशील रूप से आवंटित भंडारण द्वारा खपत की जारी करने की अनुमति या उदाहरण deallocated वस्तु के स्वामित्व में चर आपत्ति उठाने dealloc का अपना संस्करणों को लागू करना चाहिए। वर्ग विशेष आवंटन रद्द करने के बाद, उपवर्ग विधि सुपर के लिए एक संदेश के माध्यम से सुपर क्लास संस्करणों शामिल करना चाहिए dealloc के :

+0

धन्यवाद। मुझे लगता है कि मैं अब थोड़ा उलझन में हूं ... इसलिए सबक्लास के डेलोक तरीकों के अंदर, मुझे अपने इंस्टेंस वैरिएबल को डिलीक करना होगा, है ना? यानी - (शून्य) dealloc { \t [yellowViewController dealloc]; \t [blueViewController dealloc]; [सुपर डेलोक]; } – Thanks

+0

बस स्पष्ट होने के लिए, सुपर को छोड़कर किसी भी चीज़ पर डेलोक को कभी भी कॉल न करें। धन्यवाद 'dealloc विधि का उचित कार्यान्वयन है: - (शून्य) dealloc {[yellowViewController रिलीज]; [blueViewController रिलीज]; [सुपर dealloc]; } – rpetrich

+0

मुझे लगता है कि आप आईफोन 3 विकास शुरू कर रहे हैं - एसडीके की खोज (मैं भी हूं, मैंने पीले/नीले रंग के नियंत्रक प्रोजेक्ट को पहचाना है)। – mk12

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