2012-09-02 12 views
5

एक ऑपरेशन जोड़ने के बीच भिन्नता क्या है जो एनएसओपरेशनक्यूयू (या थ्रेड से सिंक्रोनस अनुरोध (मुख्य धागा नहीं) में सिंक्रोनस अनुरोध करने के बीच भिन्नता है और मुख्य धागे से एसिंक्रोनस अनुरोध करना ?NSURLConnection एक थ्रेड बनाम एसिंक्रोनस अनुरोध

दोनों मुख्य धागे को अवरुद्ध नहीं करेंगे, इसलिए यूआई उत्तरदायी रहेगा लेकिन क्या एक दूसरे का उपयोग करने का कोई फायदा है? मैं बाद की विधि में जानता हूं कि मैं अनुरोध प्रगति आदि ट्रैक कर सकता हूं लेकिन मान लीजिए कि प्रगति और अन्य HTTP सामान यहां महत्वपूर्ण नहीं हैं।

उत्तर

2

रन लूप स्रोत के रूप में रन लूप और सेटअप पर असिंक्रोनस अनुरोध निर्धारित किए जाते हैं, नेटवर्क से डेटा प्राप्त होने पर स्वचालित रूप से कोड को ट्रिगर करते हैं (किसी भी सॉकेट स्रोत के रूप में)।

NSThread पर चल रहे सिंक्रोनस अनुरोध आने वाले डेटा की निगरानी करने के लिए थ्रेड को एकाधिकार करते हैं, जो आम तौर पर काफी अधिक है।

cancel विधि का उपयोग करते हुए, आप हमेशा NSURLConnection को रद्द कर सकते हैं, भले ही इसे अतुल्यकालिक रूप से निष्पादित किया गया हो।

मैं, नई एपीआई कि एक NSOperationQueue (+sendAsynchronousRequest:queue:completionHandler:) पर एक अतुल्यकालिक अनुरोध भेजने के लिए डाकू और dispatch_source_create, या कुछ इसी तरह के तहत GCD का उपयोग करता है की अनुमति देता है का उपयोग करते हुए इतना है कि यह एक NSURLConnection पर निर्धारित है जब रूप में एक ही तरह से व्यवहार शर्त रन लूप, एक अतिरिक्त धागे का उपयोग करने से परहेज करें (डब्ल्यूडब्ल्यूडीसी 12 वीडियो देखें जो बताता है कि थ्रेड क्यों बुरा हैं और उनका उपयोग कम किया जाना चाहिए), केवल अंतर यह है कि आप प्रतिनिधि का उपयोग करने के बजाय पूरा होने पर एक ब्लॉक का उपयोग करने की अनुमति देते हैं तंत्र।

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

2

ऐतिहासिक स्थिति यह थी कि बिजली की खपत में एक फायदा है, और इसलिए बैटरी जीवन, असीमित अनुरोधों में - संभावित रूप से पुराने प्रतिनिधि दृष्टिकोण और नए ब्लॉक-आधारित दृष्टिकोण दोनों सहित।

+0

धन्यवाद, आपके पास एक बिंदु है :) – msk

+0

यह समझ में आता है। नया ब्लॉक-आधारित दृष्टिकोण क्या है * विशेष रूप से कृपया? कोड की तलाश नहीं है, बस Google से क्या पूछना है ताकि मैं कुछ दस्तावेज़ों को ग्रोक कर सकूं। – Madbreaks

+2

@ मैडब्रेक्स यह 'NSURLConnection + sendAsynchronousRequest है: कतार: समापन हैंडलर: '। – Tommy

5

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

+0

आपके उत्तर के लिए धन्यवाद यह समझ में आता है – msk

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