2011-08-16 9 views
33
  1. ऑपरेशन कतार और डिस्पैच कतार के बीच अंतर क्या हैं?
  2. प्रत्येक परिस्थितियों का उपयोग करने के लिए कौन सी परिस्थितियों में अधिक उपयुक्त होगा?
+0

इसी प्रकार के प्रश्न http://stackoverflow.com/questions/4344884/nsoperation-vs-grand-central-dispatch – Joe

उत्तर

42

NSOperationQueue ग्रांड सेंट्रल डिस्पैच पहले का है और iOS पर यह GCD का उपयोग नहीं करता आपरेशन निष्पादित करने के लिए (यह मैक ओएस एक्स पर अलग है)। यह नियमित पृष्ठभूमि थ्रेड का उपयोग करता है जिसमें जीसीडी प्रेषण कतारों की तुलना में थोड़ा अधिक ओवरहेड होता है।

दूसरी तरफ, NSOperationQueue आपको अपने परिचालनों को निष्पादित करने के तरीके पर बहुत अधिक नियंत्रण देता है। उदाहरण के लिए आप व्यक्तिगत संचालन के बीच निर्भरताओं को परिभाषित कर सकते हैं, जो सादे जीसीडी कतारों के साथ संभव नहीं है। NSOperationQueue (जहां तक ​​ऑपरेशन इसका समर्थन करता है) में लगाए गए संचालन को रद्द करना भी संभव है। जब आप किसी जीसीडी प्रेषण कतार में एक ब्लॉक को गोद लेते हैं, तो निश्चित रूप से इसे किसी बिंदु पर निष्पादित किया जाएगा।

इसे समेटने के लिए, NSOperationQueue लंबे समय से चलने वाले संचालन के लिए अधिक उपयुक्त हो सकता है जिसे रद्द करने या जटिल निर्भरताओं की आवश्यकता हो सकती है। जीसीडी प्रेषण कतार छोटे कार्यों के लिए बेहतर हैं जिनके पास न्यूनतम प्रदर्शन और मेमोरी ओवरहेड होना चाहिए।

संपादित: ऐसा लगता है प्रलेखन के बारे में NSOperationQueue पुरानी हो चुकी है और यह iOS 4.0 और बाद में उपयोग GCD करता है।

+9

[NSOperationQueue iOS 4.0 और बाद में GCD पर आधारित है।] (Https: // devforums.apple.com/message/352780#352780) –

10
  • GCD पसंद करते हैं जहां काम बहुत जटिल नहीं है और इष्टतम सीपीयू प्रदर्शन की आवश्यकता है।
  • NSOperationQueue को पसंद करें जहां कार्य जटिल है और ब्लॉक और निर्भरता प्रबंधन को रद्द या निलंबित करने की आवश्यकता है

जीसीडी एक साथ काम करने वाली इकाइयों का प्रतिनिधित्व करने का हल्का तरीका है जो एक साथ निष्पादित किए जा रहे हैं। आप काम की इन इकाइयों को निर्धारित नहीं करते हैं; प्रणाली आपके लिए शेड्यूलिंग का ख्याल रखती है। ब्लॉक के बीच निर्भरता जोड़ना सिरदर्द हो सकता है। किसी ब्लॉक को रद्द करना या निलंबित करना आपके लिए एक डेवलपर के रूप में अतिरिक्त काम बनाता है!

एनएसओपरेशन और एनएसओपरेशनक्यूयू जीसीडी की तुलना में थोड़ा अतिरिक्त ओवरहेड जोड़ते हैं, लेकिन आप विभिन्न परिचालनों के बीच निर्भरता जोड़ सकते हैं। आप संचालन का पुन: उपयोग कर सकते हैं, रद्द कर सकते हैं या उन्हें निलंबित कर सकते हैं। एनएसओपरेशन कुंजी-मूल्य निरीक्षण (केवीओ) के साथ संगत है; उदाहरण के लिए, आप NSNotificationCenter को सुनकर एनएसओपरेशन शुरू कर सकते हैं।

NSOperation और NSOperationQueue ऑब्जेक्ट उन्मुख तरीके से समेकन प्राप्त करने के लिए जीडीसी के शीर्ष पर बने उच्च लीवर एपीआई हैं।

For detailed explanation, refer this question: https://stackoverflow.com/questions/10373331/nsoperation-vs-grand-central-dispatch