5

मैं delegates के साथ गड़बड़ किए बिना URL से डेटा प्राप्त करने का एक त्वरित और आसान तरीका चाहता था।जीसीडी dispatch_async और NSURLConnection

क्या निम्नलिखित में कुछ भी गलत है?

// Use gcd 
dispatch_queue_t queue = dispatch_queue_create("com.dowork", 0); 
dispatch_queue_t main = dispatch_get_main_queue(); 

// do the long running work in bg async queue 
// within that, call to update UI on main thread. 
dispatch_async(queue, ^{ 

    // Do work in the background 
    NSData *response = [NSURLConnection sendSynchronousRequest:serviceRequest returningResponse:&serviceResponse error:&serviceError]; 

    dispatch_async(main, ^{ 

     // Update UI 
     self.data = response; 
     [self.tableView reloadData]; 


    });//end 
});//end 

मैंने सोचा कि मैं कहीं बहुत पहले कि एक पृष्ठभूमि सूत्र में NSURLConnection तुल्यकालिक विधि का उपयोग कर मेमोरी लीक कारण होगा पढ़ें। क्या ये सच है?

क्या वहां पोस्ट किए गए कोड के साथ कोई समस्या है? ब्लॉक के भीतर self.data पर डेटा असाइन करने के साथ कोई समस्या?

उत्तर

4

आप iOS5 को लक्षित कर रहे हैं और बाद में, वहाँ NSURLConnection के sendAsynchronousRequest:queue:completionHandler:

अपने विशिष्ट सवाल का जवाब करने के लिए, यह response की तरह मुझे लग रहा है रिसाव दे सकता है: अगर वहाँ GCD धागे पर एक अंतर्निहित autorelease पूल है मैं नहीं जानता।

अब कुछ शोध किया गया है: जीसीडी धागे के अपने स्वयं के ऑटोरेलीज पूल हैं लेकिन आपको नहीं पता कि उन्हें कब निकाला जाएगा। आप शायद एक स्पष्ट ऑटोरेलीज पूल के साथ पहले दो कथनों को ब्रैकेट करना चाहते हैं।

भी देखें Do you need to create an NSAutoreleasePool within a block in GCD?

+0

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

+0

@Nic: मेरा उत्तर – JeremyP

+0

अपडेट किया गया धन्यवाद, इसलिए आपको लगता है कि यह इस तरह से करना सुरक्षित है, जब तक कि मैं अपना खुद का ऑटोोरलीज पूल जोड़ूं? –