2011-02-23 5 views
6

यहां एक ऐप्पल ट्यूटोरियल से व्यू कंट्रोलर में दो विधियां हैं:एक ऐसी संपत्ति क्यों जारी करें जिसे आप पहले ही सेट कर चुके हैं?

- (void)viewDidUnload { 
    self.eventsArray = nil; 
    self.locationManager = nil; 
    self.addButton = nil; 
} 

- (void)dealloc { 
    [managedObjectContext release]; 
    [eventsArray release]; 
    [locationManager release]; 
    [addButton release]; 
    [super dealloc]; 
} 

dealloc विधि निम्न को छोटा नहीं किया जा सका? यदि नहीं, तो क्यों नहीं?

- (void)dealloc { 
    [managedObjectContext release]; 
    [super dealloc]; 
} 

उत्तर

5

- (void)viewDidUnload को कॉल करने की गारंटी नहीं है, इसलिए आपको हमेशा चीजों को भी डीलोक में छोड़ देना चाहिए।

this question देखें जब यह कहलाता है, और जब आपको यह करना चाहिए तो आपको क्या करना चाहिए।

3

नहीं, क्योंकि आप viewDidUnload पर भरोसा नहीं कर सकते आवंटन रद्द करने का आह्वान किया जा रहा है। viewDidUnload केवल तभी कॉल किया जाता है जब व्यू कंट्रोलर को स्मृति चेतावनी मिलती है जबकि उसका दृश्य स्क्रीन पर नहीं होता है। यदि दृश्य नियंत्रक को हटा दिया जाता है, viewDidUnload नहीं कहा जाता है (AFAIK, मुझे पूरी तरह से यकीन नहीं है)।

1

क्योंकि यह हमेशा आपके आईवर को डेलोक में साफ करने का एक अच्छा अभ्यास है। कुछ गलत हो सकता है, या आप एक निष्पादन का सामना कर सकते हैं जिसकी आप अपेक्षा नहीं करते हैं।

-1

eventsArraynil करने के लिए सेटिंग सिर्फ मतलब है कि यह कोई सामग्री है, लेकिन अभी भी वह सामग्री [eventsArray release] विज्ञप्ति अंतरिक्ष सरणी भस्म कॉलिंग के लिए स्थान है।

+2

वास्तव में नहीं। यदि 'eventArray' एक रखरखाव या प्रतिलिपि संपत्ति है, तो इसे' nil' पर सेट करना प्रभावी रूप से बैकिंग ऑब्जेक्ट (यदि कोई हो) जारी करता है। –

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

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