2012-10-04 17 views
20

पॉल हेगर्टी कोर्स पर आईओएस 5 ट्यूटोरियल के बाद हम इस कोड को एक ऐप में देखते हैं जो जीसीडी के उपयोग को प्रदर्शित करता है। स्पष्ट रूप से जीसीडी को रिलीज की आवश्यकता होती है क्योंकि मल्टीथ्रेडिंग के साथ मुद्दों को कुछ हद तक अप्रत्याशित किया जा रहा है, जिसमें अभी भी वस्तुओं की आवश्यकता है।क्या आपको आईओएस 6.0 में एआरसी के तहत जीसीडी कतार जारी करने की आवश्यकता है?

dispatch_async(dowloadQueue, ^{ 
    .... 
    // do some stuff 
    .... 
    }); 
    dispatch_release(dowloadQueue); 

मैं iOS 6 और XCode 4.5 में अपग्रेड किया है और मैं एक मिल "एआरसी स्पष्ट रिहाई की मनाही है ..." संदेश

मैं iOS5/XCode के तहत इस कोड की कोशिश नहीं की 4.2

क्या ऐसा इसलिए है क्योंकि एआरसी को और अधिक चालाक मिला है और अब मुझे जीसीडी में रिहाई की आवश्यकता नहीं है? या क्या मैंने अभी गलत समझा है?

उत्तर

29

जब आप माउंटेन शेर और आईओएस 6.0 को लक्षित करते हैं, तो एआरसी अब आपके लिए प्रेषण कतारों और अन्य जीसीडी प्रकारों का प्रबंधन करेगा। यदि आप ओएस एक्स या आईओएस के पुराने संस्करणों को लक्षित करते हैं, तो आपको अभी भी जीसीडी प्रकारों को स्पष्ट रूप से बनाए रखने और रिलीज करने की आवश्यकता होगी (न केवल थ्रेड सुरक्षा कारणों के लिए, आप अन्यथा स्मृति को रिसाव करेंगे), लेकिन यह केवल आपके लिए ओएस को लक्षित करते समय संभाला जाता है संस्करणों।

यही कारण है कि आप आईओएस 6.0 को लक्षित करते समय एआरसी के तहत ऐसी संकलक त्रुटि देखते हैं।

+0

क्या आपको कतार बनाने पर उद्देश्य-सी को __bridge_transfer करने की आवश्यकता है? – openfrog

+0

@openfrog - नहीं, अगर इसे उद्देश्य-सी ऑब्जेक्ट के रूप में माना जाता है तो इसे पहले से ही एआरसी द्वारा संभाला जाता है, इसलिए इसे स्थानांतरित करने की आवश्यकता नहीं है। –

+0

@BradLarson क्या इसे बंद करने का कोई तरीका है? या, मैं इसे कैसे लिखूं ताकि यह आईओएस 5 और आईओएस 6 दोनों के तहत संकलित हो? – fishinear

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