2011-06-05 2 views
8

NSString की विधि -UTF8String के लिए प्रलेखन के अनुसार:जीसी के तहत प्रबंधित सी प्रकारों की याददाश्त कैसे होती है?

लौटे सी स्ट्रिंग स्वचालित रूप से बस के रूप में एक लौटे वस्तु जारी किया जाएगा मुक्त कर दिया है, आपको सी स्ट्रिंग की प्रतिलिपि बनाना चाहिए यदि इसे ऑटोरेलीज़ संदर्भ के के बाहर स्टोर करने की आवश्यकता है जिसमें सी स्ट्रिंग बनाई गई है। ,

- (const char*) giveMeACString 
{ 
    NSString* string = @"I'm a string!"; 
    return [string UTF8String]; 
} 

ठीक है इतने लंबे समय बुला विधि लौटे स्थिरांक चार व्यवहार करता है के रूप में * यह एक autoreleased वस्तु होगा के रूप में:

तो नीचे/रिलीज स्मृति प्रबंधन, निम्न विधि बरकरार रहती है।

हालांकि, कचरा संग्रह के तहत एक ऑटोरेलीज संदर्भ नहीं है, जहां तक ​​मुझे पता है। और सी प्रकार कचरा नहीं एकत्रित होते हैं, इसलिए ऐसा नहीं लगता है कि जीसी लौटाए गए पॉइंटर का इलाज करेगा क्योंकि यह एक लौटा ऑब्जेक्ट होगा।

इसके जीवनकाल से क्या जुड़ा हुआ है? क्या यह अभी भी थ्रेड के रनलोप में एक बिंदु पर मुक्त है जो विश्वसनीय रूप से 'बाद में' है, या यह गैर-जीसी के तहत जीसी के तहत अलग-अलग व्यवहार करता है?

उत्तर

2

मुझे लगता है कि स्मृति को कचरा एकत्रित स्मृति से आवंटित किया गया है और वापसी का प्रकार __strong const char* है। इसका मतलब यह है कि इसे सामान्य तरीके से एकत्र किया जाएगा जब यह पॉइंटर्स के रूट सेट से पहुंच योग्य नहीं है।

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

मैं अटकलें हैं कि अपरिवर्तनीय स्वयं स्ट्रिंग की UTF8 संस्करण के लिए एक संदर्भ को बनाए रखता है, तो यह केवल एक बार यह गणना करने के लिए है और इसलिए UTF8 स्ट्रिंग शायद दूर नहीं जाना होगा जब तक NSString करता है यही वजह है कि है आपको सामान्य रूप से गायब होने के बारे में चिंता करने की ज़रूरत नहीं है।

0

चूंकि आपने स्पष्ट रूप से उन रिक्त स्थान आवंटित नहीं किए हैं, इसलिए आपको डेलोकेशन के बारे में चिंता करने की आवश्यकता नहीं है।

+0

मुझे यकीन है कि आप सही हैं कि मुझे इसे मैन्युअल रूप से मुक्त करने की आवश्यकता नहीं है, लेकिन मुझे आश्चर्य है कि कब और कैसे कोको इसे मुक्त करेगा। –

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