2010-02-11 13 views
9

मैंने पिछले कुछ हफ्तों में कोकोटा टच कैसे काम किया है, यह जानने के दौरान मैंने देखा है कि dealloc आईफोन सिम्युलेटर में ऐप से बाहर निकलने पर विधियों को कॉल नहीं किया जा रहा है। अब, निष्पक्ष होने के लिए, मैं कुछ भी वैज्ञानिक नहीं कर रहा हूं - बस NSLog कथन डालें जो कंसोल पर प्रिंट कर सकते हैं। मेरे प्रश्न हैं:क्या आईफोन पर डेलोक को बुलाया जाता है?

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

  2. dealloc को ऑप्टिमाइज़ेशन के रूप में नहीं कहा जाता है, क्योंकि ऐप किसी भी तरह से बाहर निकल रहा है?

  3. क्या dealloc एस को वास्तविक आईफोन हार्डवेयर पर चलने पर कॉल किया जाएगा?

+1

मुझे मैक ओएस एक्स पर भी मिला है कि ऐप समाप्त होने पर 'dealloc' को नहीं कहा जाता है। किसी भी स्मृति जो उपयोग में है, वैसे भी ओएस द्वारा पुनः दावा किया जाएगा। – dreamlax

उत्तर

10

docs कहता है कि ऑपरेटिंग सिस्टम के लिए मेमोरी के सभी हिस्सों को धीरे-धीरे छोड़ने के लिए ऑपरेटिंग सिस्टम के लिए मेमोरी को पुनः प्राप्त करने के लिए यह अधिक कुशल है। इस कारण से, dealloc वस्तुओं की एक बड़ी संख्या में नहीं भेजा जा सकता है; और के लिए यह कारण dealloc में दुर्लभ संसाधनों का प्रबंधन नहीं करना महत्वपूर्ण है। दुर्लभ संसाधनों को साफ करने के लिए शायद यह एक बेहतर विचार है कि आपके आवेदन प्रतिनिधि applicationWillTerminate: पर प्रतिक्रिया दें और वहां अपना क्लीनअप करें।

- (void) applicationWillTerminate:(NSApplication/UIApplication *) anApp 
{ 
    [scarceResourceManager relinquishScarceResources]; 
} 
+3

ब्लंट होने के लिए: एक ऐप समाप्त होने पर 'मुक्त() 'या' डिलीकेट 'कॉल करने वाले CPU चक्रों को खर्च करना संसाधनों का पूर्ण और कुल अपशिष्ट है। मैक ओएस एक्स और आईफोन दोनों मेमोरी मॉडल का उपयोग करते हैं जहां प्रत्येक प्रक्रिया अलगाव में रखी जाती है। जब कोई प्रक्रिया समाप्त हो जाती है, तो उस ऐप से संबंधित सभी * मेमोरी संसाधन एक बार में पुनः दावा किए जाते हैं। – bbum

+0

धन्यवाद सपने देखने और बीबीएम, यह कुछ ऐसा है जो मुझे थोड़ी देर के लिए परेशान कर रहा है, बहुत सराहना की। – fuzzygoat

+0

सपने देखने और बीबीएम दोनों सही हैं। समाप्ति पर स्मृति मुक्त करना अपशिष्ट है लेकिन महत्वपूर्ण बात यह है कि फ्रीिंग मेमोरी को छोड़कर समाप्त होने पर कई चीजें होती हैं। और यह पोस्ट उन मामलों के लिए मूल्यवान है। – Eonil

0

जैसा कि सपनों के पहले से ही कहा गया है, जैसे ही एप्लिकेशन बाहर निकलता है, सिस्टम सभी मेमोरी को पुनः प्राप्त करता है। इसलिए छोड़ने पर एप्लिकेशन को डेलोक कॉल करने के लिए कोई उपयोग नहीं है। यह मैक ओएस एक्स पर मानक व्यवहार है, और मुझे संदेह है कि यह एक आईफोन - सिमुलेट या "असली" पर अलग होगा।

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