2011-03-04 15 views
7

का एक उदाहरण पुन: उपयोग करना मैं एक सर्वर से डेटा का अनुरोध करने के लिए आईफोन पर NSURLConnection का एक उदाहरण उपयोग कर रहा हूं, जो सामान्य रूप से एक प्रतिनिधि द्वारा प्रबंधित किया जाता है। अनुरोध काफी बार होते हैं (शायद हर 2 मिनट में एक बार कहें) और एक सामान्य और निश्चित यूआरएल है।NSURLConnection

  1. वहाँ पहले कनेक्शन को बनाए रखना है और यह पुन: उपयोग में किसी भी लायक है: बल्कि NSURLConnection का अच्छा उदाहरण देखकर प्रत्येक डाउनलोड करने के बाद एक नया बनाया जा रहा जारी किया जा रहा है और फिर से? (मुझे आशा है कि, एक अच्छा प्रमाणीकरण हजारों के लायक होना चाहिए।)

  2. यदि हां, तो मैं इसका पुन: उपयोग कैसे करूं? दस्तावेज़ों में स्टैंडआउट विधि -start है लेकिन यह NSURLConnection के पहले से उपयोग किए गए (और गैर-शून्य) उदाहरण पर कॉल करते समय ऐप को क्रैश करने लगता है। [डॉक्स "।, अगर यह पहले से ही नहीं है रिसीवर का कारण बनता है डेटा लोड शुरू करने के लिए" -start में क्या कहती हैं]

मामले में यह उपरोक्त प्रश्नों के संबंध में मदद की है, मैं (था!) कर रहा हूँ प्रस्ताव:

if (connection_ == nil) 
    { 
    connection_ = [NSURLConnection connectionWithRequest:request 
               delegate:self]; 
    } 
    else 
    { 
    [connection_ start]; 
    } 
+0

दिलचस्प सवाल ... :) – Jasarien

+0

यह थोड़ा सा डुप्लिकेट है, http://stackoverflow.com/questions/886810/nsurlconnection-is-run- कई- समय देखें। हालांकि अभी भी कोई अच्छा जवाब नहीं है। ऐसा लगता है कि आपको इस कार्य के लिए अपनी कक्षा बनाने की जरूरत है। – SK9

+0

ऐसा प्रतीत होता है कि उस प्रश्न के उत्तर में से एक कनेक्शन के बजाय एक HTTP स्ट्रीम का सुझाव दे रहा है-एक बार कनेक्शन। एक स्ट्रीम खोलना और केवल 2 मिनट का उपयोग करना एक अच्छा विचार नहीं होगा। मुझे कनेक्शन ऑब्जेक्ट को रिहा करने और पुनर्निर्माण के साथ वास्तव में कोई समस्या नहीं दिखाई देती है। क्या यह पूर्व-अनुकूलन नहीं है? – Jasarien

उत्तर

3

डॉक्स कहना है कि यूआरएल कनेक्शन यह प्रतिनिधि को बरकरार रखे हुए (अपरंपरागत, लेकिन आवश्यक इस मामले में) लगता है और फिर इसे रिलीज जब कनेक्शन लोड हो जाने, विफल रहता है या रद्द कर दिया गया है।

समस्या यह है कि प्रतिनिधि NSRLConnection पर एक सेटटेबल संपत्ति नहीं है और इसलिए इसे रिलीज़ होने के बाद इसे रीसेट नहीं किया जा सकता है। यह यूआरएल कनेक्शन एक बार चलाने के बाद बेकार है, अगर आप इसे फिर से करना चाहते हैं तो इसे रिलीज़ करने और उसे फिर से बनाने की आवश्यकता है।

+0

@ जे: यह मैंने जो भी इकट्ठा किया। मुझे NSRLConnection के विकल्पों के बारे में पता नहीं है, शायद एएसआई [http://allseeing-i.com/ASIHTTPRequest/] आदि? – SK9

+0

मैंने 'AIHTTPRequest' का उपयोग नहीं किया है, लेकिन मेरा मानना ​​है कि यह 'NSURLConnection' पर बनाया गया है, भले ही आप उनमें से किसी एक का पुन: उपयोग कर सकें, फिर भी यह हुड के नीचे यूआरएल कनेक्शन जारी और पुनर्निर्माण करेगा। – Jasarien

+0

@J: क्या समय से पहले एक प्रमाणीकृत NSURLConnection बनाना संभव है, और अनुरोध करने में देरी हो रही है? (यानी बंदूक लोड करें, तैयार होने पर आग।) – SK9