संबंधित प्रश्न के मेरे उत्तर के अनुरूप , मैं बीजे से असहमत होने जा रहा हूं और आपको पहले सुझाव देता हूं कि आप जीसीडी को NSOperation / NSOperationQueue पर देखें, जब तक कि उत्तरार्द्ध आपको कुछ ऐसा प्रदान नहीं करता है जिसकी आपको जीसीडी आवश्यकता नहीं है।
जीसीडी से पहले, मैंने संगामिति के प्रबंधन के लिए अपने अनुप्रयोगों के भीतर कई NSOperations / NSOperationQueues का उपयोग किया। हालाँकि, जब से मैंने नियमित रूप से GCD का उपयोग करना शुरू किया, मैंने लगभग पूरी तरह से NSOperations और NSOperationQueues को ब्लॉक और प्रेषण कतारों से बदल दिया है। यह इस बात से आया है कि मैंने अभ्यास में दोनों तकनीकों का उपयोग कैसे किया है, और प्रोफाइलिंग से मैंने उन पर प्रदर्शन किया है।
सबसे पहले, NSOperations और NSOperationQueues का उपयोग करते समय ओवरहेड की एक nontrivial राशि होती है। ये कोको की वस्तुएं हैं, और उन्हें आवंटित करने और उन्हें निपटाने की आवश्यकता है। एक iOS एप्लिकेशन में जो मैंने लिखा था जो 60 एफपीएस में 3-डी दृश्य प्रस्तुत करता है, मैं प्रत्येक गाया फ्रेम को एनकैप करने के लिए NSOperations का उपयोग कर रहा था। जब मैंने इसे प्रोफाइल किया, तो इन NSOperations के निर्माण और अशांति चल रहे एप्लिकेशन में सीपीयू चक्रों के एक महत्वपूर्ण हिस्से के लिए जिम्मेदार था, और चीजों को धीमा कर रहा था। मैंने इन्हें साधारण ब्लॉकों और एक जीसीडी सीरियल कतार के साथ बदल दिया, और यह ओवरहेड गायब हो गया, जिसके कारण यह बेहतर प्रदर्शन प्रदान कर रहा है। यह एकमात्र जगह नहीं थी जहाँ मैंने NSOperations का उपयोग करने से अधिक ध्यान दिया था, और मैंने इसे मैक और iOS दोनों पर देखा है।
दूसरा, ब्लॉक-आधारित प्रेषण कोड के लिए एक लालित्य है जो NSOperations का उपयोग करते समय मिलान करना मुश्किल है। यह एक ब्लॉक में कोड की कुछ पंक्तियों को लपेटने और एक सीरियल या समवर्ती कतार पर किए जाने के लिए इसे भेजने के लिए अविश्वसनीय रूप से सुविधाजनक है, जहां एक कस्टम NSOperation या NSInvocationOperation बनाने के लिए ऐसा करने के लिए बहुत अधिक सहायक कोड की आवश्यकता होती है। मुझे पता है कि आप एक NSBlockOperation का उपयोग कर सकते हैं, लेकिन आप तब GCD को कुछ भेज सकते हैं। इस कोड को अपने आवेदन में संबंधित प्रसंस्करण के साथ ब्लॉक में लपेटकर अलग-अलग तरीकों या कस्टम NSOperations जो इन कार्यों को अंजाम देते हैं, की तुलना में बेहतर कोड संगठन के लिए मेरी राय में होता है।
NSOperations और NSOperationQueues का अभी भी बहुत अच्छा उपयोग है। GCD पर निर्भरता की कोई वास्तविक अवधारणा नहीं है, जहां NSOperationQueues सुंदर जटिल निर्भरता ग्राफ सेट कर सकते हैं। मैं कुछ मामलों में इसके लिए NSOperationQueues का उपयोग करता हूं।
कुल मिलाकर, जब मैं आमतौर पर कार्य को पूरा करने वाले उच्चतम स्तर के अमूर्त का उपयोग करने की वकालत करता हूं, तो यह एक ऐसा मामला है जहां मैं जीसीडी के निचले स्तर के एपीआई के लिए तर्क देता हूं। IOS और Mac डेवलपर्स के बीच मैंने इस बारे में बात की है, विशाल बहुमत NSOperations पर GCD का उपयोग करने के लिए चुनते हैं जब तक कि वे इसके लिए समर्थन के बिना ओएस संस्करणों को लक्षित नहीं कर रहे हैं (आईओएस 4.0 और स्नो लेपर्ड से पहले)।