मैक कमांड लाइन टूल में स्विफ्ट में DispatchQueue.main.async का उपयोग करते समय रन लूप की आवश्यकता क्यों है?
मुझे यह समझने के लिए Apple का दस्तावेज़ मिला कि मुझे मुख्य प्रेषण कतार में कार्य को कार्यान्वित करने के लिए रन लूप का उपयोग क्यों करना चाहिए।
Apple डॉक्स के अनुसार ,
मुख्य प्रेषण कतार एक विश्व स्तर पर उपलब्ध धारावाहिक कतार है जो एप्लिकेशन के मुख्य थ्रेड पर कार्यों को निष्पादित करती है। यह कतार अनुप्रयोग के रन लूप (यदि कोई मौजूद है) रन लूप से जुड़े अन्य इवेंट स्रोतों के निष्पादन के साथ कतारबद्ध कार्यों के निष्पादन में हस्तक्षेप करने के लिए काम करता है। क्योंकि यह आपके एप्लिकेशन के मुख्य थ्रेड पर चलता है, मुख्य कतार का उपयोग अक्सर किसी एप्लिकेशन के लिए मुख्य सिंक्रनाइज़ेशन बिंदु के रूप में किया जाता है।
लेकिन फिर भी, मुझे समझ नहीं आ रहा है कि 'क्यों' रन लूप की जरूरत है। ऐसा लगता है कि 'इसे रन लूप की जरूरत है क्योंकि इसे रन लूप की जरूरत है'। अगर कोई मुझे इस बारे में समझाएगा तो मैं इसकी बहुत सराहना करूंगा। धन्यवाद।
जवाब
क्यों मैं मुख्य प्रेषण कतार में कार्य को लागू करने के लिए रन लूप का उपयोग करना चाहिए
आम तौर पर, आप नहीं, क्योंकि आप पहले से ही एक का उपयोग कर रहे हैं!
एक आवेदन परियोजना में, पहले से ही एक मुख्य कतार रन लूप है । उदाहरण के लिए, एक iOS ऐप प्रोजेक्ट वास्तव में UIApplicationMain के लिए एक विशाल कॉल के अलावा कुछ भी नहीं है, जो एक रन लूप प्रदान करता है।
यह है कि यह उपयोगकर्ता के लिए कुछ करने के लिए इंतजार कर वहाँ बैठने में सक्षम है। रन लूप है, उह, रनिंग। और लूपिंग।
लेकिन, कहते हैं, एक मैक कमांड लाइन उपकरण, कोई स्वचालित रन लूप नहीं है। यह अपना मुख्य कार्य चलाता है और तुरंत बाहर निकलता है। यदि आपको ऐसा करने की आवश्यकता नहीं है, तो आप एक रन लूप की आपूर्ति करेंगे।
DispatchQueue.main.async
जब आपके पास एक पृष्ठभूमि कतार पर चलने वाला कोड होता है और आपको मुख्य कतार पर निष्पादित होने के लिए कोड के एक विशिष्ट ब्लॉक की आवश्यकता होती है।आपके कोड में,
viewDidLoad
पहले से ही मुख्य कतार पर चल रहा है इसलिए DispatchQueue.main.async का उपयोग करने का बहुत कम कारण है।लेकिन इसका इस्तेमाल करना जरूरी नहीं है। लेकिन यह निष्पादन के क्रम को बदल देता है।
वर्तमान रनअप पूर्ण होने के बाद चलाने के लिए async बंद कतारबद्ध है।
मुझे समझ नहीं आ रहा है कि 'क्यों' रन लूप की जरूरत है
आमतौर पर, कमांड लाइन ऐप्स के लिए रन लूप की आवश्यकता नहीं होती है। आप रन लूप का उपयोग कर सकते हैं यदि आपके पास एक की विशेष आवश्यकता है (जैसे आपके पास कुछ गतिशील यूआई है जो उपयोगकर्ता इनपुट की प्रतीक्षा करते समय कुछ कार्य कर रहा है), लेकिन कमांड लाइन एप्लिकेशन के विशाल बहुमत को रन लूप की आवश्यकता नहीं है।
के रूप में डॉक्स कहते हैं:
एक रन लूप एक इवेंट प्रोसेसिंग लूप है जिसका उपयोग आप काम को शेड्यूल करने और आने वाली घटनाओं की प्राप्ति को समन्वित करने के लिए करते हैं। एक रन लूप का उद्देश्य आपके धागे को व्यस्त रखना है जब कोई काम करना है और जब कोई नहीं है तो अपने धागे को सोने के लिए रख दें।
इसलिए, यदि आपको अपने ऐप को कुछ आने वाली घटनाओं की प्रतीक्षा करने की आवश्यकता है या आप कतारों के बीच अतुल्यकालिक रूप से कार्यों को भेज रहे हैं, तो, ठीक है, लूप चलाएं, लेकिन अन्यथा, परेशान न करें। अधिकांश कमांड लाइन ऐप को रन लूप का उपयोग करने की आवश्यकता नहीं है।