संक्षिप्त जवाब: हाँ, एआरसी बरकरार है और प्रेषण कतार जारी करता है।
और अब लंबे उत्तर के लिए ...
यदि आपका परिनियोजन लक्ष्य iOS 6.0 या Mac OS X 10.8 से कम है
आप उपयोग करने की आवश्यकता है dispatch_retainऔर dispatch_releaseअपने कतार पर। एआरसी उन्हें प्रबंधित नहीं करता है।
यदि आपका परिनियोजन लक्ष्य iOS 6.0 या Mac OS X 10.8 या बाद का संस्करण है
एआरसी आपके लिए अपनी कतार का प्रबंधन करेगी। आप (और नहीं कर सकते हैं) की जरूरत नहीं उपयोग dispatch_retainया dispatch_releaseयदि एआरसी सक्षम है।
विवरण
IOS 6.0 SDK और Mac OS X 10.8 SDK में शुरू, हर डिस्पैच ऑब्जेक्ट (सहित dispatch_queue_t) भी एक ऑब्जेक्टिव-सी ऑब्जेक्ट है। यह <os/object.h>हेडर फ़ाइल में प्रलेखित है :
* By default, libSystem objects such as GCD and XPC objects are declared as
* Objective-C types when building with an Objective-C compiler. This allows
* them to participate in ARC, in RR management by the Blocks runtime and in
* leaks checking by the static analyzer, and enables them to be added to Cocoa
* collections.
*
* NOTE: this requires explicit cancellation of dispatch sources and xpc
* connections whose handler blocks capture the source/connection object,
* resp. ensuring that such captures do not form retain cycles (e.g. by
* declaring the source as __weak).
*
* To opt-out of this default behavior, add -DOS_OBJECT_USE_OBJC=0 to your
* compiler flags.
*
* This mode requires a platform with the modern Objective-C runtime, the
* Objective-C GC compiler option to be disabled, and at least a Mac OS X 10.8
* or iOS 6.0 deployment target.
इसका मतलब है आप अपने कतार एक में स्टोर कर सकते हैं NSArrayया NSDictionaryया में से एक के साथ एक संपत्ति में, strong, weak, unsafe_unretained, assign, या retainगुण। इसका अर्थ यह भी है कि यदि आप किसी ब्लॉक से अपनी कतार का उल्लेख करते हैं, तो ब्लॉक स्वचालित रूप से कतार को बनाए रखेगा।
तो अगर आपके तैनाती लक्ष्य है कम से कम iOS 6.0 या मैक ओएस एक्स 10.8, और आप एआरसी सक्षम किया हुआ है , एआरसी रख सकेंगे और अपने कतार जारी है, और संकलक इच्छा झंडा उपयोग करने के लिए किसी भी प्रयास dispatch_retainया dispatch_releaseएक त्रुटि के रूप में।
अपने तैनाती लक्ष्य कम से कम है, तो आईओएस 6.0 या मैक ओएस एक्स 10.8, और आप एआरसी विकलांग है , तो आप मैन्युअल को बनाए रखने और अपने कतार छोड़ते हैं, तो चाहिए या तो फोन करके dispatch_retainऔर dispatch_release, या कतार भेजकर retainऔर release(जैसे संदेश [queue retain]और [queue release])।
पुराने कोडबेस के साथ संगतता के लिए, आप कंपाइलर को अपनी पंक्ति को ऑब्जेक्टिव-सी ऑब्जेक्ट के रूप में परिभाषित करके OS_OBJECT_USE_OBJCदेख सकते हैं 0। उदाहरण के लिए, आप इसे अपनी .pchफ़ाइल में (किसी भी #importकथन से पहले ) डाल सकते हैं :
#define OS_OBJECT_USE_OBJC 0
या आप OS_OBJECT_USE_OBJC=0अपनी बिल्ड सेटिंग्स में प्रीप्रोसेसर मैक्रो के रूप में जोड़ सकते हैं । आप सेट करते हैं OS_OBJECT_USE_OBJCकरने के लिए 0, एआरसी होगा नहीं बनाए रखने या आप के लिए अपने कतार जारी, और आप इसे अपने आप को ऐसा करने के लिए उपयोग कर रहा होगा dispatch_retainऔर dispatch_release।