2011-04-19 13 views

उत्तर

0

एक बार जब आप वस्तु autorelease कॉल दे दिया है, अब आप autorelease pool को अपनी रिहाई जिम्मेदारी दे दिया है, अब यह सिर्फ तरह आपकी नहीं है यह .. यह यादृच्छिक व्यवहार यह दुर्घटना या कभी कभी नहीं हो सकता है दिखाएगा है। (

[Ball alloc]: जब autorlease पूल इसे जारी, अगर अपनी रिहाई तो यह दुर्घटना जाएगा)

+0

यह बिल्कुल सटीक नहीं है। पूल समाप्त होने तक यह वैध रहेगा। यह अचानक क्रैश होने शुरू नहीं होगा क्योंकि आप ऑटोरेलेज्ड थे। – Chuck

+0

हां, जो मैंने पिछली पंक्ति में लिखा था। जैसा कि हम नहीं जानते कि दिए गए कोड से घिरा हुआ क्या है, हम कभी भी इसके बारे में निश्चित नहीं हो सकते हैं। (चाहे वह निकाला गया हो या नहीं।) – Ravin

26

के इसे तोड़ने के नीचे चलो पर निर्भर करता है यह एक गेंद उद्देश्य यह है कि हम खुद (और इस प्रकार जारी करने के लिए की जरूरत है) पैदा करता है।

[[Ball alloc] init]: यह उस बॉल ऑब्जेक्ट को शुरू करता है जिसे हमने अभी बनाया है।

[[[Ball alloc] init] autorelease]: यह गेंद को वर्तमान ऑटोरेलीज पूल में जोड़ता है, इसलिए जब पूल निकाला जाता है तो इसे रिलीज़ किया जाएगा। ऐसा करने के लिए यह सही बात है, उदाहरण के लिए, हम गेंद को एक विधि से वापस करने जा रहे थे।

[[[[Ball alloc] init] autorelease] autorelease]: यह फिर से गेंद ऑब्जेक्ट को स्वत: चलाता है। यह 100% गलत है। alloc स्वामित्व का एकमात्र दावा है जिसे हमें संतुलित करने की आवश्यकता है, इसलिए गेंद को अब कई बार रिलीज़ किया जाएगा। यह किसी भी तरीके से प्रकट हो सकता है, लेकिन यह शायद दुर्घटनाग्रस्त हो जाएगा।

+0

मैं इसे आजमाता हूं [[[[बॉल एलोक] init] autorelease] autorelease]; और यह दुर्घटनाग्रस्त नहीं होगा। क्या आप कृपया मुझे बता सकते हैं कि यह कब दुर्घटनाग्रस्त हो जाएगा? –

+0

@ सचिनकुमारम: यह अनिर्धारित व्यवहार है। कोई गारंटी नहीं है। आम तौर पर, इसे अधिक ऑब्जेक्ट आवंटित किए जाने पर क्रैश होने की अधिक संभावना होती है। – Chuck

1

संक्षिप्त उत्तर: एक दुर्घटना आती है।

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