5

यानी ऑब्जेक्ट को तुरंत जारी किया जाएगा और अगर मैंने ऐसा किया तो पूल द्वारा जारी नहीं किया जाना चाहिए?क्या मैं एक ऑटोरेलीज ऑब्जेक्ट को जल्दी से रिलीज़ कर सकता हूं?

[[NSArray arrayWithCapacity:100] release]; 

इस बारे में दस्तावेज़ों में स्पष्ट स्पष्टीकरण नहीं मिल रहा है।

उत्तर

7

ऑब्जेक्ट आमतौर पर ऑटोरेलेड होने पर यह क्रैश हो जाएगा। autorelease का अर्थ है "देरी रिलीज", इसलिए इसे जारी किया जाएगा: बस बाद में। चूंकि ऑब्जेक्ट बाद में मौजूद नहीं होगा क्योंकि आप इसे मैन्युअल रूप से रिलीज़ कर रहे हैं, तो आप -release संदेश को अपने अब-डिलीओटेड ऑब्जेक्ट पर भेजने के रनटाइम के कारण क्रैश हो जाएंगे।

संपादित करें: ध्यान दें कि यदि आप -retain ऑटोरियोजित आते हैं, तो आपको -release उन्हें रखना होगा: आप स्वामित्व ले रहे हैं।

+1

मान लें कि (किसी भी कारण से) मैं * * चाहता हूं कि इसे अभी जारी किया जाए। है "[[obj retain] रिलीज]" एक मान्य विकल्प? – noamtm

+2

वास्तव में नहीं। उस स्थिति में, आपको पूरी तरह से पूल को बनाने और नष्ट करने के लिए @autoreleasepool {} में लपेटना चाहिए। –

+0

सहमत हैं, पूरी चीज़ को @autoreleasepool में लपेटें –

1

मुझे एहसास है कि यह अब बेवकूफ है, और मुझे ऐसा कुछ जारी नहीं करना चाहिए जो मेरे पास नहीं है।

+0

बेवकूफ नहीं - मैं वास्तव में वही काम करना चाहता हूं! – Brad

0

यदि आप ऑब्जेक्ट को ऑटो-रिलीज पूल में नहीं जाना चाहते हैं, तो आप मैन्युअल alloc और initWithCapabity कर सकते हैं। यदि आप ऐसा करते हैं, तो आपको किसी बिंदु पर मैन्युअल रूप से release करना होगा।

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

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