NSData
हमेशा +dataWithContentsOfURL:options:error:
नामक एक बहुत ही सुविधाजनक विधि है। सुविधाजनक होने पर, यह वर्तमान धागे के निष्पादन को भी अवरुद्ध करता है, जिसका अर्थ है कि यह मूल रूप से उत्पादन कोड के लिए बेकार था (NSOperation
को अनदेखा कर रहा था)। मैंने इस विधि को इतनी बार प्रयोग किया, मैं पूरी तरह से भूल गया कि यह अस्तित्व में है। हाल ही तक।NSURLConnection बनाम NSData + GCD
तरह से मैं नलियों से डेटा हथियाने किया गया है मानक NSURLConnectionDelegate
दृष्टिकोण है: एक डाउनलोड वर्ग है कि विभिन्न NSURLConnectionDelegate
तरीकों संभालती लिखें कुछ डेटा का निर्माण धीरे-धीरे,, त्रुटियों संभाल, आदि मैं आमतौर पर यह सामान्य बना देंगे जितना संभव हो उतने अनुरोधों के लिए पुन: उपयोग किया जा सकता है।
कहें कि मेरी सामान्य डाउनलोडर कक्षा 100 लाइनों के बॉलपार्क में कहीं भी चलती है। यह असीमित रूप से करने के लिए 100 लाइनें हैं NSData
एक पंक्ति में सिंक्रनाइज़ कर सकती है। अधिक जटिलता के लिए, डाउनलोडर क्लास को अपने मालिक के पूर्ण होने और त्रुटियों को संवाद करने के लिए स्वयं के एक प्रतिनिधि प्रोटोकॉल की आवश्यकता होती है, और मालिक को उस प्रोटोकॉल को कुछ फैशन में लागू करने की आवश्यकता होती है।
अब, ग्रांड सेंट्रल डिस्पैच दर्ज करें, और मैं के रूप में सनक से के रूप में सरल कुछ कर सकते हैं:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
NSData* data = [NSData dataWithContentsOfURL:someURL];
// Process data, also async...
dispatch_async(dispatch_get_main_queue(), ^(void) {
// Back to the main thread for UI updates, etc.
});
});
और मैं, कहीं मैं चाहता हूँ कि चूसने वाला फेंक कर सकते हैं सही में लाइन। डाउनलोड क्लास की आवश्यकता नहीं है, कनेक्शन प्रतिनिधि तरीकों को संभालने की कोई ज़रूरत नहीं है: बस कुछ ही पंक्तियों में आसान एसिंक डेटा। इस दृष्टिकोण और मेरे पूर्व-जीसीडी दृष्टिकोण के बीच असमानता बहुत अच्छा है जो बहुत अच्छा ट्रू अलार्म होने के लिए ट्रिगर करने के लिए पर्याप्त है।
इस प्रकार, मेरे सवाल: वहाँ NSURLConnection
(यह मानते हुए मैं डाउनलोड प्रगति की तरह चीजों के बारे में परवाह नहीं है) के बजाय सरल डेटा डाउनलोड कार्यों के लिए NSData
+ GCD का उपयोग कर के लिए किसी भी चेतावनियां हैं?
एक के लिए अनुरोध रद्द नहीं कर सकता .. – Daniel