2010-10-26 7 views
6

मैं, एक उदाहरण के ऑनलाइन कि ऑब्जेक्टिव-सीमोनोटच डेलोक के बराबर क्या है?

-(void)dealloc { 
    [activeController viewWillDisappear:NO]; 
    [activeController.view removeFromSuperview]; 
    [activeController viewDidDisappear:NO]; 

    [activeController release]; 
    [super dealloc]; 
} 

में इस कोड को मुझे लगता है मीट्रिक टन बराबर निपटान किया जाएगा शामिल तलाश में हूं मैं सही हूँ?

मैं फोन की जरूरत नहीं होगी: के रूप में वे कचरा Monotouch पर एकत्र किया जाएगा

[activeController release]; 
    [super dealloc]; 

तरीकों, यह भी सही है?

उत्तर

14

मोनो टच कचरा इकट्ठा किया गया है, इसलिए आपको खुद को हटाने के बारे में चिंता करने की आवश्यकता नहीं है।

कहा जा रहा है, कई बार जब आप जानते हैं कि आप स्मृति में कुछ बड़े संसाधनों रख रहे हैं और आप तुरंत संसाधनों निपटाने के बजाय कचरा कलेक्टर में किक करने के लिए इंतजार कर प्रणाली की सहायता के लिए चाहते हैं।

यह तब होता है जब निपटान निपटाना आसान होता है: यह कचरा कलेक्टर से पहले जुड़े संसाधनों को जारी करता है। छवियों की तरह बड़ी वस्तुओं के लिए यह विशेष रूप से महत्वपूर्ण है, क्योंकि छवियां अप्रबंधित ढेर पर संग्रहीत होती हैं, जबकि ऑब्जेक्ट संदर्भ प्रबंधित ढेर में संग्रहीत होते हैं।

इसका मतलब यह है कि यदि आपके पास 8 मेगाबाइट छवि है: 8 मेगाबाइट अप्रबंधित ढेर (उद्देश्य-सी द्वारा प्रबंधित) और प्रबंधित सूचकांक में 1 सूचक (4 बाइट) में संग्रहीत हैं। जहां तक ​​मोनो कचरा कलेक्टर का संबंध है, आप 4 बाइट्स का उपयोग कर रहे हैं, न कि 8 मेग्स।

तो ऐसा समय होता है जब आप निपटान करके सिस्टम की सहायता कर सकते हैं: आप जानते हैं कि निर्दोष रूप से "myImage" वैरिएबल वास्तव में स्मृति के एक बड़े ब्लॉब को इंगित करता है।

+1

बहुत ही रोचक चीजें !! आपके लिए एक प्रश्न।" छवियों को अप्रबंधित ढेर पर संग्रहीत किया जाता है, जबकि वस्तु संदर्भ संदर्भ में संग्रहीत होते हैं प्रबंधित ढेर "मतलब? क्या आप समझा सकते हैं कि छवियों को एक अप्रबंधित ढेर में क्यों डाला जाता है? अग्रिम धन्यवाद। –

1

मोनोटच कचरा इकट्ठा किया गया है। किसी वस्तु को कचरा इकट्ठा करने से पहले, वस्तु के लिए विनाशक कहा जाता है।

यहां Microsoft's page about C# destructors है। मुझे नहीं पता कि मोनोटच में विनाशकों के लिए अधिक प्रासंगिक दस्तावेज हैं या नहीं।

1

आपको रिलीज या डेलोक कॉल करने की आवश्यकता नहीं है, उन्हें मोनो टच द्वारा ख्याल रखा जाता है।

0
Xamarin प्रलेखन से

http://docs.xamarin.com/ios/advanced_topics/api_design#When_to_call_Dispose

आप निपटान बुलाना चाहिए जब आप अपने वस्तु से छुटकारा पाने में मोनो की जरूरत है। एक संभावित उपयोग मामला तब होता है जब मोनो को कोई ज्ञान नहीं है कि आपका एनएसओब्जेक्ट वास्तव में स्मृति, या एक सूचना पूल जैसे महत्वपूर्ण संसाधन का संदर्भ रख रहा है। उन मामलों में, आपको मोनो को कचरा संग्रहण चक्र करने की प्रतीक्षा करने के बजाय स्मृति को संदर्भ को तुरंत रिलीज़ करने के लिए निपटान करना चाहिए। आंतरिक रूप से, जब मोनो सी # तारों से एनएसएसटींग संदर्भ बनाता है, तो यह कचरा कलेक्टर को जो काम करना है, उसे कम करने के लिए तुरंत उन्हें निपटान करेगा। इससे निपटने के लिए कम ऑब्जेक्ट्स, जीसी तेजी से चलेंगे। "

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