मैं मेमोरी प्रबंधन के बारे में सेब से प्रलेखन पढ़ रहा था जब मुझे ऑटोरेलीज पूल ब्लॉक मिला और कुछ मुझे सोचने लगा।आईओएस ऑटोरेलीज पूल ब्लॉक
Any object sent an autorelease message inside the autorelease pool block is
released at the end of the block.
मुझे यकीन नहीं है कि मैं इसे पूरी तरह से समझता हूं। एक ऑटोरेलीज पूल ब्लॉक के अंदर बनाई गई कोई भी वस्तु ब्लॉक के अंत में रिलीज हो जाती है क्योंकि यह जीवन काल है। ऑब्जेक्ट पर ऑटोरिलीज को कॉल करने की आवश्यकता क्यों होगी जब यह ब्लॉक के अंत तक पहुंचने पर वैसे भी रिलीज होने जा रहा है?
साफ होने के लिए, मैं एक उदाहरण देना होगा, मैं क्या सोच रहा हूँ की:
@autoreleasepool {
MyObject *obj = [[MyObject alloc] init]; // no autorelease call here
/* use the object*/
//....
// in the end it should get deallocated because it's lifespan ends, right?
// so why do we need to call autorelease then?!
}
पुनश्च: कृपया मुझे बताओ नहीं है कि एआरसी की वजह से हम कुछ काम करने की जरूरत नहीं है क्योंकि एआरसी उनका ख्याल रखता है। मैं इसके बारे में पूरी तरह से अवगत हूं, लेकिन मैं स्मृति प्रबंधन के तंत्र को समझने के लिए कुछ ही क्षणों के लिए एआरसी को छोड़ना चाहता हूं।
तो यह मेरे प्रश्न का उत्तर कैसे दे रहा है? मैंने केवल इस तरह के उत्तरों से बचने के लिए एक सरल उदाहरण प्रदान किया है जिसमें प्रश्न के साथ बहुत कुछ नहीं है।मैंने छोटे उदाहरण में टिप्पणियां भी शामिल कीं। – Teo
आमतौर पर आप केवल उस फ़ंक्शन में ऑटोरेलीज पूल का उपयोग करते हैं जहां उच्च स्मृति उपयोग होता है और आपको इसे सामान्य रूप से सामान्य रूप से मुक्त करने की आवश्यकता होती है। अनुच्छेद का उद्देश्य संदर्भ जोड़ने का इरादा था। – Kibitz503
ठीक है, तो एक गैर एआरसी env, '' MyObject * obj = [[MyObject alloc] init]; '' एक ऑटोरेलीज पूल के अंदर एक मेमोरी रिसाव होगा लेकिन एआरसी एनवी पर, कंपाइलर स्वचालित रूप से रिलीज कॉल के लिए रिलीज कॉल जोड़ता है वस्तु या फिर यह स्मृति स्मृति रिसाव क्यों नहीं है? – Teo