2012-05-11 9 views
16

क्या निम्नलिखित कोड मुख्य धागे पर चलते हैं? क्या "मुख्य कतार" मुख्य धागे का संदर्भ देता है?dispatch_get_main_queue() का उपयोग करना मतलब है कि मेरा कोड मुख्य धागे पर होगा?

dispatch_async(dispatch_get_main_queue(), 
^{ 
    // Some code 
}); 
+0

ध्यान दें कि यदि आप ऐसा करते हैं और ** आप मुख्य धागे पर पहले से ही ** हैं, वास्तव में यह ** QUATE HARMLESS ** है। जटिल नेटवर्किंग कोड होने पर यह बहुत सुविधाजनक है! :) – Fattie

उत्तर

27

प्रेषण एसिंक बनाम सिंक का एसिंक भाग समवर्ती बनाम सीरियल से अलग है। Async का अर्थ है कि फ़ंक्शन तुरंत लौटाता है, सिंक का मतलब है कि यह तब तक इंतजार करेगा जब तक कि ब्लॉक निष्पादित नहीं हो जाता है। चूंकि मुख्य धागा/कतार धारावाहिक है, इसलिए क्रम में चीजों को निष्पादित करने जा रहे हैं - I मानते हैं इसका मतलब है कि चूंकि आप इसे उसी थ्रेड पर एसिंक प्रेषण के लिए पूछ रहे हैं, जिसे आप प्रेषित कर रहे हैं, यह तुरंत वापस आ जाएगा, वर्तमान रन लूप के अंत तक और कतार में कुछ और तक प्रतीक्षा करें, और फिर अपने ब्लॉक को निष्पादित करें।

यह मुख्य धागे की तुलना में कतार के अंदर अधिक उपयोगी है - आप अपने डेटा को संसाधित कर सकते हैं, यूआई को अद्यतन करने के बारे में जान सकते हैं, और सबकुछ फिर से निकालने के लिए इंतजार किए बिना प्रसंस्करण जारी रख सकते हैं। यही कारण है कि आप अक्सर एक dispatch_sync के बजाय किसी अन्य dispatch_async (समवर्ती कतार) के अंदर मुख्य थ्रेड पर dispatch_async कॉल देखें।

24

हां। Apple developer site से:

प्रेषण ढांचे अनुप्रयोग का उपयोग करने के लिए एक डिफ़ॉल्ट धारावाहिक कतार प्रदान करता है। यह कतार dispatch_get_main_queue() के माध्यम से उपयोग की जाती है।

+1

मुख्य धागे से जुड़े रन लूप होने पर केवल मुख्य थ्रेड पर चलाने की गारंटी है। – CouchDeveloper

8

यह docs for dispatch_get_main_queue() itself समेत कई स्थानों पर प्रलेखित है। Concurrency Programming Guide का कहना है:

मुख्य प्रेषण कतार एक विश्व स्तर पर उपलब्ध धारावाहिक कतार है कि आवेदन के मुख्य थ्रेड पर कार्य निष्पादित होता है।

+2

बिल्कुल सही नहीं: मुख्य धागे से जुड़े रन लूप होने पर ही मुख्य थ्रेड पर चलाने की गारंटी है। अन्यथा, 'dispatch_async (dispatch_get_main_queue(), ब्लॉक) के माध्यम से प्रेषित ब्लॉक किसी भी धागे पर निष्पादित हो सकता है। – CouchDeveloper

+1

मुख्य धागे हमेशा कोको ऐप, @CouchDeveloper में एक रन लूप होता है। –

+0

@ जोश कैसवेल ओपी कोको का उल्लेख नहीं करता है;) – CouchDeveloper

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